C++入门教程(八十):多重继承

小古银的官方网站(完整教程):http://www.xiaoguyin.com/
C++入门教程视频:https://www.bilibili.com/video/av20868986/

目录

多重继承的简单使用

多重继承就是派生类继承了多个基类。我们知道继承可以将基类的所有成员都继承下来作为自己的成员,重继承也是一样。

基础示例

#include <iostream> // std::cout std::endl

class base1
{
public:
    void show(void) const noexcept;
};

class base2
{
public:
    void print(void) const noexcept;
};

class derived : public base1, public base2
{
};

int main(void)
{
    derived x;
    x.show();
    x.print();
    return 0;
}

void base1::show(void) const noexcept
{
    std::cout << "基类1的show()函数" << std::endl;
}

void base2::print(void) const noexcept
{
    std::cout << "基类2的print()函数" << std::endl;
}

基础讲解

派生类使用多重继承的格式如下:

class 派生类 : public 基类1, public 基类2, public 基类3

上面代码的派生类将基类1的show()函数和基类2的print()函数都继承下来。

多重继承与单继承基本上差不多,所以接下来只说差异和需要注意的事项。

多重继承的调用顺序

基础示例

#include <iostream> // std::cout std::endl

class base1
{
public:
    base1(void);
    ~base1(void);
};

class base2
{
public:
    base2(void);
    ~base2(void);
};

class derived : public base2, public base1
{
public:
    derived(void);
};

int main(void)
{
    {
        derived x;
    }
    return 0;
}

base1::base1(void)
{
    std::cout << "基类1构造函数" << std::endl;
}

base1::~base1(void)
{
    std::cout << "基类1析构函数" << std::endl;
}

base2::base2(void)
{
    std::cout << "基类2构造函数" << std::endl;
}

base2::~base2(void)
{
    std::cout << "基类2析构函数" << std::endl;
}

derived::derived(void)
    : base1()
    , base2()
{
}

输出结果:

基类2构造函数
基类1构造函数
基类1析构函数
基类2析构函数

基础讲解

派生类继承基类的顺序是2→1,派生类调用基类构造函数是1→2,而输出结果是2→1。因此多重继承的基类构造函数调用顺序就是继承基类时的顺序。而析构函数相反。

多重继承的调用顺序总结

通过上面的示例,再结合之前的教程示例,可以总结出下面的调用顺序:

派生类对象的创建顺序:(基类成员变量创建和初始化 → 基类构造函数执行) × n个基类并且按继承顺序调用 → 派生类成员变量创建和初始化 → 派生类构造函数执行。

派生类对象的释放顺序:(派生类析构函数执行 → 派生类成员变量释放) × n个基类并且按继承顺序的反序调用 → 基类析构函数执行 → 基类成员变量释放。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值