继承问题

多态与继承

首先要明确一点,在继承的时候是不会继承基类的构造函数和析构函数的

问题:
编写出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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值