首页 > 分享 > 宠物的生长(虚函数和多态)

宠物的生长(虚函数和多态)

宠物的生长(虚函数和多态)

最新推荐文章于 2024-05-29 22:29:43 发布

陈晓树 于 2022-06-17 11:14:38 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

题目描述

需要开发一个系统,对宠物的生长状态进行管理。给出下面的基类框架:

class Pet

{ protected:

  string name;//姓名

float length;//身长

float weight;//体重

CDate current;//开始记录时间

(日期类CDate包含年、月、日三个私有数据,其他方法根据需要自拟。)

public:

virtual void display(CDate day)=0;//输出目标日期时宠物的身长和体重

}

以Pet为基类,构建出Cat和Dog两个类:

Cat一天身长加0.1,体重加0.2。

Dog一天身长加0.2,体重加0.1。

生成上述类并编写主函数,要求主函数中有一个基类指针Pet *pt,用于测试子类数据。

主函数根据输入的信息,相应建立Cat类对象或Dog类对象,并给出测量日期时宠物的身长和体重。

输入

第一行为测试次数

第二行是开始记录日期

从第三行起,每个测试用例占一行,每行给出宠物的基本信息:宠物的类型(1为Cat,2为Dog)、名字、身长、体重、最后测量的日期。

输出

要求输出目标日期宠物姓名、身长和体重(结果要求保留小数点后2位)。若测量日期小于开始日期,输出”error”。

输入样例1

3
2019 5 5
1 tony 10 10 2018 12 30
2 jerry 5 6 2019 5 10
1 tom 3 4 2019 6 1
 

输出样例1

error
jerry after 5 day: length=6.00,weight=6.50
tom after 27 day: length=5.70,weight=9.40

#include<iostream>

#include<cstring>

#include<iomanip>

using namespace std;

class CDate {

private:

int year;

int month;

int day;

public:

CDate(){}

CDate(int y, int m, int d)

{

year = y;

month = m;

day = d;

}

int compare(CDate& p)//计算相差天数

{

int temp1 = 0; int temp2 = 0;

int m[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//非闰年年份各月天数

int n[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };//闰年年份各月天数

if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))//判断闰年

{

for (int i = 0; i < month - 1; i++)//加前面月份的天数

{

temp1 += n[i];

}

}

else {

for (int i = 0; i < month - 1; i++)

{

temp1 += m[i];

}

}

if ((p.year % 4 == 0 && p.year % 100 != 0) || (p.year % 400 == 0))

{

for (int i = 0; i < p.month - 1; i++)//同理

{

temp2 += n[i];

}

}

else {

for (int i = 0; i < p.month - 1; i++)

{

temp2 += m[i];

}

}

temp1 += day;//加输出月份的日期

temp2 += p.day;

if (year == p.year)//年份相等直接相减

{

return temp2 - temp1;

}

else if (year > p.year)//年份不相等

{

return -1;

}

else//同理

{

int min = year;

int max = p.year;

while (max - min)

{

if ((min % 4 == 0 && min % 100 != 0) || (min % 400 == 0))

{

temp2 += 366;

}

else

{

temp2 += 365;

}

min++;

}

return temp2 - temp1;

}

}

};

class Pet

{

protected:

string name;//姓名

float length;//身长

float weight;//体重

CDate current;//开始记录时间

//(日期类CDate包含年、月、日三个私有数据,其他方法根据需要自拟。)

public:

Pet(){}

void set(string n,float l,float w,CDate c)

{

name = n;

length = l;

weight = w;

current = c;

}

virtual void display(CDate day) = 0;//输出目标日期时宠物的身长和体重

};

class Cat: public Pet {

virtual void display(CDate day)

{

int d;

d = current.compare(day);

if (d < 0)

{

cout << "error" << endl;

}

else

{

length = length + d * 0.10;

weight = weight + d * 0.20;

cout << name << " after " << d << " day: length=" <<fixed<< setprecision(2) << length << ",weight=" << fixed << setprecision(2) << weight << endl;

}

//jerry after 5 day: length = 6.00, weight = 6.50

}

};

class Dog :public Pet {

virtual void display(CDate day)

{

int d;

d = current.compare(day);

if (d < 0)

{

cout << "error"<<endl;

}else {

length = length + d * 0.20;

weight = weight + d * 0.10;

cout << name << " after " << d << " day: length=" <<fixed<< setprecision(2) << length << ",weight=" << fixed << setprecision(2) << weight << endl;

}

}

};

int main()

{

string name;

float length;//身长

float weight;//体重

Pet* pt;

int t;

cin >> t;

int year, month, day;

cin >> year >> month >> day;

CDate s(year,month,day);

while (t--)

{

int type;

cin >> type;

if (type == 1)

{

cin >> name>>length >> weight >> year >> month >> day;

CDate d(year,month,day);

Cat c;

c.set(name, length, weight, s);

pt = &c;

pt->display(d);

}

else {

cin >> name >> length >> weight >> year >> month >> day;

CDate d(year, month, day);

Dog c;

c.set(name, length, weight, s);

pt = &c;

pt->display(d);

}

}

return 0;

}

//以Pet为基类,构建出Cat和Dog两个类:

//

//Cat一天身长加0.1,体重加0.2。

//

//Dog一天身长加0.2,体重加0.1。

//

//生成上述类并编写主函数,要求主函数中有一个基类指针,用于测试子类数据。

//

//主函数根据输入的信息,相应建立Cat类对象或Dog类对象,并给出测量日期时宠物的身长和体重。

相关知识

宠物的生长(虚函数和多态)
编写程序模拟“主人”喂养“宠物”的场景,利用多态的思想!!!
如何理解:行为是结果的函数
为什么你拍的猫片都是虚的?这些原因和技巧速速get!
学生喂养三种宠物:猫、狗和鸟
拍猫总是虚?学会这些技巧,没在怕的!
15款狗粮测试:伯纳天纯、澳丽得等3款蛋白虚标;蓝氏钙含量垫底
Android
吉林省水稻节水灌溉与水分管理的技术与模式研究
java练习题

网址: 宠物的生长(虚函数和多态) https://m.mcbbbk.com/newsview78963.html

所属分类:萌宠日常
上一篇: 数据结构——宠物信息管理系统(顺
下一篇: node.js毕业设计宠物之家综