需要开发一个系统,对宠物的生长状态进行管理。给出下面的基类框架:
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)、名字、身长、体重、最后测量的日期。
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 12345
要求输出目标日期宠物姓名、身长和体重(结果要求保留小数点后2位)。若测量日期小于开始日期,输出”error”。
error jerry after 5 day: length=6.00,weight=6.50 tom after 27 day: length=5.70,weight=9.40 123
#include <iostream> #include <vector> #include<string> #include<cmath> #include <memory> #include<iomanip> using namespace std; class date { private:int year, mon, day; public:date(){}void set(int y, int m, int d){year = y;mon = m;day = d;}date(int y, int m, int d){year = y;mon = m;day = d;}friend int days(const date& a, const date& b){const int mons1[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };const int mons2[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 };int ad = a.year * 10000 + a.mon * 1000 + a.day;int bd = b.year * 10000 + b.mon * 1000 + b.day;if (ad > bd){return 0;}else{ad = 0;bd = 0;if (a.year % 400 == 0 || (a.year % 4 == 0 && a.year % 100 != 0)){for (int i = 0; i < a.mon-1; i++){ad += mons2[i];}for (int i = 0; i < a.mon-1; i++){bd += mons2[i];}ad += a.day;bd += b.day;return bd - ad;}else{for (int i = 0; i < a.mon-1; i++){ad += mons1[i];}for (int i = 0; i < b.mon-1; i++){bd += mons1[i];}ad += a.day;bd += b.day;return bd - ad;}}} }; class pet { protected:string name;float len;float wei;date now; public:pet(string n, float l, float w, date n1){name = n;len = l;wei = w;now = n1;}virtual void display(date day) = 0; }; class cat :public pet { public:cat(string n, float l, float w, date n1):pet(n,l,w,n1){}void display(date ago){int lon = days(ago, now);if (lon){cout << name << " after " << lon << " day: length=" << fixed << setprecision(2) << len+lon*0.1 << ",weight=" << fixed << setprecision(2) << wei+lon*0.2 << endl;}else{cout << "error" << endl;}} }; class dog :public pet { public:dog(string n, float l, float w, date n1) :pet(n, l, w, n1) {}void display(date ago){int lon = days(ago, now);if (lon){cout << name << " after " << lon << " day: length=" << fixed << setprecision(2) << len + lon * 0.2 << ",weight=" << fixed << setprecision(2) << wei + lon * 0.1 << endl;}else{cout << "error" << endl;}} }; int main() {int sum;cin >> sum;int y, m, d;string n;int len, wei;cin >> y >> m >> d;date ago(y, m, d);int id;pet* pt;while (sum--){cin >> id;cin >> n >> len >> wei;cin >> y >> m >> d;date now(y, m, d);if (id == 1){pt = new cat (n, len, wei, now);pt->display(ago);}else{pt=new dog(n, len, wei, now);pt->display(ago);}} }
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154相关知识
宠物的生长(虚函数和多态)
C++ 宠物的生长(虚函数和多态)
宠物的生长(多态)
C++动物运动会源代码资源
PTA 宠物的生长(多态) (10 分)
java特性封装、抽象、继承、多态理论
C++课程作业之 宠物类的创建
C++赋值运算符重载函数(operator=)
C++程序设计(上)练习
添加主人类,通过多态实现给宠物喂食。
网址: C++ 宠物的生长(虚函数和多态) https://m.mcbbbk.com/newsview565888.html
上一篇: VSCode中还能养宠物,于是我 |
下一篇: java宠物王国代码 |