C++ 多重继承
c++ multiple inheritance
我无法弄清楚在以下情况下会发生什么:
class MBase {
public:
MBase(int) {}
virtual char* vf() const = 0;
virtual ~MBase() {}
};
class D1 : public MBase { //NOT VIRTUAL!!!
public:
D1() : MBase(1) {}
char* vf() const { return "D1"; }
};
class D2 : virtual public MBase {
public:
D2() : MBase(2) {}
char* vf() const { return "D2"; }
};
class Bottom : public D1, public D2 {
public:
char* vf() const { return "Bottom"; }
}
Base* b = new Bottom();
在钻石的原始定义中,D1 和 D2 实际上都继承自 MBase,但这里只有一个。 我们是否仍然在 Bottom 对象中有两个单独的子对象,因此,最后一行将无法编译,因为编译器不知道要使用哪个子对象?
这在 C++03 标准的第 10.1.4 节中指定。 虚拟和非虚拟基地是独立的,因此每个基地都有一个。
通过扩展您的示例很容易看到这一点:
class MBase {
public:
MBase(int arg) { cerr << "MBase::MBase(" << arg << ")n"; }
virtual const char* vf() const = 0;
virtual ~MBase() {}
};
class D1 : public MBase { //NOT VIRTUAL!!!
public:
D1() : MBase(1) {}
const char* vf() const { return "D1"; }
};
class D2 : virtual public MBase {
public:
D2()
: MBase(2) // This doesn't get used in this example because
// it is the responsibility of the most-derived
// class to initialize a virtual base, and D2 isn't
// the most-derived class in this example.
{
}
const char* vf() const { return "D2"; }
};
class Bottom : public D1, public D2 {
public:
Bottom()
: MBase(5) // D1 and D2 default constructors are called implicitly.
{
}
const char* vf() const { return "Bottom"; }
};
int main(int argc,char **argv)
{
Bottom b;
return 0;
}
输出:
MBase::MBase(5)
MBase::MBase(1)
我认为你的问题与此类似...... 基本上,每个对象都有自己的 mBase 类的基本对象......
钻石传承
问候,埃瓦尔德
相关文章:
- 关于C++中具有多重继承"this"指针的说明
- C++中模板化异常类的多重继承
- 虚拟继承中是否存在多重继承?
- 如何在 c++ 多重继承中调用父非虚函数?
- 多重继承相同的方法名,没有歧义
- 使用enable_if解决多重继承歧义
- 多重继承导致虚假的模糊虚拟函数过载
- 多重继承和访问不明确的元素
- C++ 多重继承:使用基类 A 的实现实现基类 B 的抽象方法
- 多重继承中的派生类的行为类似于聚合
- 为什么我的 Hippomock 期望在使用多重继承时失败
- 带有此指针的模板类多重继承构造函数不起作用?
- 使用多重继承时出现编译错误
- 增强多重继承的序列化
- 多重继承:跳过'virtual'关键字并拒绝菱形层次结构的使用?
- 仅函数的多重继承 - 没有虚拟和 CRTP
- C++多重继承和鸭子类型
- C++两次从文件保存对象读取多重继承
- 从多重继承中的派生类函数调用适当的父类函数
- C++具有多重继承的构造函数重载解析