多层继承


#include <iostream>

//艺人类
class Artist{
public:
    Artist(){
        std::cout<<"Artist()"<<std::endl;
    }
    ~Artist(){
        std::cout<<"~Artist()"<<std::endl;
    }
public:
    char name[4];//姓名
};
//歌手类
class Singer:public Artist{
public:
    Singer(){
        std::cout<<"Singer()"<<std::endl;
    }
    ~Singer(){
        std::cout<<"~Singer()"<<std::endl;
    }
public:
    int age; //年龄
};

//广东话歌手类
class CantoneseSinger:public Singer{
public:
    CantoneseSinger(){
        std::cout<<"CantoneseSinger()"<<std::endl;
    }
    ~CantoneseSinger(){
        std::cout<<"~CantoneseSinger()"<<std::endl;
    }
    private:
    double fee; //出场费
};
int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "sizeof(Artist):"<<sizeof(Artist)<<std::endl;; //4
    std::cout << "sizeof(Singer):"<<sizeof(Singer)<<std::endl;; //8 =4+4
    std::cout << "sizeof(CantoneseSinger):"<<sizeof(CantoneseSinger)<<std::endl;; //16 = 4+4+8

    CantoneseSinger cs;
    return 0;
}
sizeof(Artist):4
sizeof(Singer):8
sizeof(CantoneseSinger):16
Artist()
Singer()
CantoneseSinger()
~CantoneseSinger()
~Singer()
~Artist()

从分配的内存可以看到确实实现了继承

实例化的时候,先调用爷爷的构造器,接着父亲的构造器,然后自己的,析构的时候,正好相反。

results matching ""

    No results matching ""