OOP继承问题,虚基类, 建构子的构建顺序问题

这里我们说说多重继承(multiple inheritance)。 多重继承的问题涉及到建构子和析构子的调用顺序问题, 多重继承造成的歧义型(例如, 当多个base classes中有同名函数的时候, 如何解决, members from common base class如何解决(dimond的时候, 即类A继承自B, C, 但是B, C又同时继承自一个类D时候, 就出现歧义了, 此时A有两份关于D的拷贝))。 当涉及到vitual base class(虚基类)的时候, 初始化的顺序和调用顺序如何呢??

首先, 定义一个class具有多个parent class 很简单, 只需要list them one by one:

<span style="font-size:14px;">class Boo: public Bum, public Foo {
    // specify its own properties
};</span>
这样, 一个Boo类的object可以upcast(向上转型)为 Bum, 或者Foo, 因为Boo继承了其父类的一切, 虽然object无法看到父类的private的部分。

当我们创建一个Boo的object的时候, 需要先调用Bum 和 Foo的default constructor, 然后在调用自己的。 也就是说, 先构造父亲的那一部分, 调用析构子的顺序和调用构造子的顺序相反

如下:

#include <iostream>
using namespace std;

class Sofa {
public:
    Sofa() {
        cout << "构造Sofa" << endl;
    }
    ~Sofa() {
        cout << "析构Sofa" << endl;
    }
    void sit() {
        cout << "sit" << endl;
    }
};

class Bed {
public:
    Bed() {
        cout << "构造Bed" << endl;
    }
    ~Bed() {
        cout << "析构Bed" << endl;
    }
    void lie() {
        cout << "lie" << endl;
    }
};

class Sofabed: public Bed, public Sofa { //按照list的顺序构建, 即继承的顺序
public:
    Sofabed() {
        cout << "构造Sofabed" << endl;
    }
    ~Sofabed() {
        cout &l
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值