栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

题目描述

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

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=" <
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/980145.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号