多重继承的时候一定要写析构函数!!

写了个题,多重继承,题目如下:

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

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

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

3、为两栖动物类设计display()函数,可以输出动物属性,输出样式见样例

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

本来不是很难的一个题,就想偷会懒不写析构函数,还特地上网搜了析构函数,都说可写可不写,然后就没写,排序用的是sort加上自定义的一个比较游泳速度的一个比较函数,怎么都过不了,换了三四个排序都不行,出的错误是初始化好的对象信息丢失 与紊乱,最后每个类都加上析构函数,就对了。 第一张图是错的,第二张结果正确,程序的修改只有加上析构函数。暂时不知道原因,望各位大佬指教。


附上丑丑的代码:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
class animal{
public:
string name;
int length;
int weight;
   char sex;
   animal(){
}
~animal(){
}
animal(string n,int l,int w,char s){
name=n;
length=l;
weight=w;
sex=s;
}
};
class ter_animal:virtual public animal{
public:
int r_speed;
~ter_animal(){
}
ter_animal(){
}

ter_animal(string n,int l,
int w,char s,int r_s):animal(n,l,w,s),r_speed(r_s){

};
class aqu_animal:virtual public animal{
public:
int s_speed;
aqu_animal(){
}
~aqu_animal(){
}
aqu_animal(string n,int l,int w,char s,
int s_s):animal(n,l,w,s),s_speed(s_s){
}

};
class amp_animal:public ter_animal,public aqu_animal{
    public:
void input(){
    string n; 
int l,w;
char s;
int r_s;
int s_s;
cin>>n>>l>>w>>s>>r_s>>s_s;
name=n;
length=l;
weight=w;
sex=s;
r_speed=r_s;
s_speed=s_s;
}
    void display(){
cout<<"name:"<<name<<endl;
cout<<"height:"<<length<<endl;
cout<<"weight:"<<weight<<endl;
cout<<"sex:"<<sex<<endl;
cout<<"running_speed:"<<r_speed<<endl;
cout<<"swimming_speed:"<<s_speed;
}
amp_animal(){
}
~amp_animal(){
}
amp_animal(string n,int l,int w,char s,int r_s,
int s_s):animal(n,l,w,s),ter_animal(n,l,w,s,r_s),
aqu_animal(n,l,w,s,s_s){
}
};




bool compare(const amp_animal &a,const amp_animal &b){
if (a.s_speed>b.s_speed||a.s_speed==b.s_speed)
return true;
return false; 
}
int main(){
amp_animal a[3];
for(int i=0;i<3;i++){
a[i].input();
}
       sort(a,a+3,compare);
for(int i=0;i<3;i++){
a[i].display();
cout<<endl;
}
}
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值