基于虚基类的多重继承设计

题目描述:利于虚基类建立一个类的多重继承,包含动物(aninal,属性有名称,体长,体重和性别),陆生动物(ter_animal,s属性增加了奔跑速度),水生动物(aqu_animal,属性增加了游泳速度)和两栖动物(amp_animal),其中两栖动物保留了陆生动物和水生动物的属性。

1、完成4个类的无参和全参构造函数

2、为两栖动物类设计input函数。可以从键盘输入动物属性

3、为两栖动物类设计display函数,可以输出动物属性

4、在主函数中声明两栖动物数组,包含3个两栖动物,调用input()函数从键盘输入3个两栖动物的名称 、体长、体重、性别、奔跑速度和游泳速度,按游泳速度从快到慢排序后,在调用display()函数输出这3个两栖动物的信息

#include<iostream>
#include<algorithm>
using namespace std;
//基类 
class Animal{
	public:
		Animal(){} 
		Animal(string nam,string s,float l,float w):name(nam),sex(s),length(l),weight(w){}
		void input0();
		void output0(){
		cout<<"名称:"<<name<<" "<<"体长:"<<length<<" "<<"体重:"<<weight<<" "<<"性别:"<<sex<<" ";
	}
	protected:
		string name,sex;
		float length,weight;
};

void Animal::input0(){
	cin>>name>>length>>weight>>sex;
}
//直接派生类,继承虚基类 
class Ter_animal:virtual public Animal{  
	public:
		Ter_animal(){} 
		Ter_animal(string nam,string s,float l,float w,int sp):Animal(nam,s,l,w){
			runspeed=sp;
		}
	void input1(){
		cin>>runspeed;
	}
	protected:
		int runspeed;
};
//直接派生类,继承虚基类 
class Aqu_animal:virtual public Animal{
	public:
		Aqu_animal(){} 
		Aqu_animal(string nam,string s,float l,float w,int sp):Animal(nam,s,l,w){
			swimspeed=sp;
		}
	void input2(){
		cin>>swimspeed;
	}
		int swimspeed;
};
//多重继承的派生类 
class Amp_animal:public Ter_animal,public Aqu_animal{
	public:
		Amp_animal(){} 
		Amp_animal(string nam,string s,float l,float w,int sp1,int sp2):Animal(nam,s,l,w),Ter_animal(nam,s,l,w,sp1),Aqu_animal(nam,s,l,w,sp2){}
		void input(){
			cout<<"请输入动物的名称,体长,体重,性别,奔跑速度和游泳速度:"<<endl;
			input0(); 
	        input1();
	        input2();
        }
        void display(){
        	cout<<"该两栖动物的属性:"<<endl;
        	output0();
        	cout<<"奔跑速度:"<<runspeed<<" "<<"游泳速度:"<<swimspeed<<endl;
		} 
};
int cmp(Amp_animal s1,Amp_animal s2){
	return s1.swimspeed>s2.swimspeed;
}
int main(){
	Amp_animal amp[3];
	for(int i=0;i<3;i++)
	amp[i].input();
	sort(amp,amp+3,cmp);
	for(int j=0;j<3;j++)
	amp[j].display();
	return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值