题目描述:利于虚基类建立一个类的多重继承,包含动物(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;
}