• 关于多态的问题


    今天的上机课有一题比较困惑的地方,刚好老师在课上也讲了,就拿出来分享下。

    题目的大意是要我们利用虚函数实现多态。

    接下来是代码:

    
    #include<iostream>
    using namespace std;
    
    class Pet
    {
    	protected: 
    	    string name;//姓名 
    		int length;//身长 
    		int weight;//体重 
    		int current;//当前日期 
    	    
    	public:
    	    Pet(string a,int b,int c,int d)
    		{
    			name=a;
    			length=b;
    			weight=c;
    			current=d;
    		} 
    	    virtual void display(int day)//输出目标日期的身长和体重
    	    {
    	    	
    		}
    };
    
    
    class Cat:public Pet
    {
    	public:
    	    Cat(string a,int b,int c,int d)
    	    :Pet(a,b,c,d)
    		{
    			
    		} 
    	    virtual void display(int day)//输出目标日期的身长和体重	
    	    {
    	    	int b;
    	    	b=day-current;
    	    	length=length+b;
    	    	weight=weight+2*b;
    	    	cout<<name<<" "<<length<<" "<<weight<<endl;
    		}
    };
    
    class Dog:public Pet
    {
    	public:
    	    Dog(string a,int b,int c,int d)
    	    :Pet(a,b,c,d)
    		{
    			
    		} 
    	    virtual void display(int day)//输出目标日期的身长和体重	
    	    {
    	    	int b;
    	    	b=day-current;
    	    	length=length+2*b;
    	    	weight=weight+b;
    	    	cout<<name<<" "<<length<<" "<<weight<<endl;	    	
    		}
    };
    
    
    int main()
    {
    	int type,count=0,day;
    	Pet *pet[10];
    	while(cin>>type)
    	{
    		string a;
    		int b,c,d;
    		if(type==1)
    	    {
    	    	cin>>a>>b>>c>>d;
    
    
    	    	pet[count]=new Cat(a,b,c,d);  //正确写法
    
     
                    /*重点是在这边!!!
                     一开始我是这么写的
    
                     Cat cat(a,b,c,d); 
                     pet[count]=&cat;
      
                     但是这样是错误的,老师说如果这样写的其实pet[count]的类型只是在这个if中为
                     cat,一旦出去就变回了父类的pet,因为在这里只是随意的指向一个地方,出去后指
                     针就不懂指向哪里了,就变为了最初始的pet了,所以租后的调用的display函数是pet
                     的,而不是cat的,所以没输出东西。*/
    
    
    	    	count++;
    		}
    		else if(type==2)
    		{
    			cin>>a>>b>>c>>d;
    	    	pet[count]=new Dog(a,b,c,d);	
    	    	count++;
    		}
    		else
    		{
    			day=type;
    			break;
    		}
    	}
    	
    	for(int i=0;i<count;i++)
    	{
    		pet[i]->display(day);
    		delete pet[i];
    	}
    	
    	return 0;
    }
    
    
  • 相关阅读:
    Ros学习——Cmakelists.txt文件解读
    Ros学习——Movebase源码解读
    C++——STL之vector, list, deque容器对比与常用函数
    Ros学习——移动机器人Ros导航详解及源码解析
    C++——多线程
    C++——STL容器
    PHP对图片按照一定比例缩放并生成图片文件
    PHP二维数组排序
    PHP裁剪图片并上传完整demo
    [PHP] php实现文件下载
  • 原文地址:https://www.cnblogs.com/zxlmhh/p/5604312.html
Copyright © 2020-2023  润新知