需要开发一个系统,对宠物的生长状态进行管理。给出下面的基类框架:
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#include #include 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=" < > 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类对象,并给出测量日期时宠物的身长和体重。



