多态与继承
首先要明确一点,在继承的时候是不会继承基类的构造函数和析构函数的
问题:
编写出Mammal并派生出Dog类,两者都有speak()函数,并设为虚函数,要求实现多态性
#include<iostream>
using namespace std;
class Mammal
{
private:
int age;
char gender;
public:
void initMammal(int age,char gender){ //进行初始化的成员函数
this->age=age;
this->gender=gender;
}
Mammal(int age,char gender):age(age),gender(gender){
cout<<"constructor mammal"<<endl;
}
Mammal()=default;
~Mammal(){
cout<<"destructor Mammal"<<endl;
}
virtual void speak(){
cout<<"this is Mammal"<<endl;
}
int getage()
{
return age;
}
char getgender()
{
return gender;
}
};
class Dog:public Mammal
{
private:
bool fur;
public:
Dog(int age,char gender,bool fur):fur(fur){
initMammal(age,gender); //调用基类的成员函数进行初始化,不能调用基类的构造函数,因为根本就没有继承到
cout<<"constructor dog"<<endl;
}
~Dog(){
cout<<"destructor dog"<<endl;
}
virtual void speak(){
cout<<"wangwang"<<endl;
}
bool getfur()
{
return fur;
}
};
int main()
{
Mammal m(2,'m');
Dog d(3,'w',true);
cout<<m.getage()<<m.getgender()<<endl;
cout<<d.getage()<<d.getgender()<<d.getfur()<<endl;
m.speak();
d.speak();
return 0;
}
结果
constructor mammal
constructor dog
2m
3w1 //如果Dog的构造函数调用的是基类的构造函数,那么就不会输出正确的结果,因为没有继承所以显示乱码
this is Mammal
wangwang
destructor dog
destructor Mammal
destructor Mammal