q12*_*26y 3 c++ inheritance access-control sealed virtual-inheritance
class ClassSealer {
private:
friend class Sealed;
ClassSealer() {}
};
class Sealed : public ClassSealer
{
// ...
};
class FailsToDerive : public Sealed
{
// This class is capable of being instantiated
};
Run Code Online (Sandbox Code Playgroud)
以上未能封上课,但以下作品,为什么?
class ClassSealer {
private:
friend class Sealed;
ClassSealer() {}
};
class Sealed : public virtual ClassSealer
{
// ...
};
class FailsToDerive : public Sealed
{
// Cannot be instantiated
};
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?虚拟继承在这里发挥了什么作用?
对于正常继承,派生类的构造函数仅调用直接基类的构造函数.所以在第一个例子中,构造函数FailsToDerive调用构造函数Sealed,构造函数又调用它的构造函数ClassSealer,允许它做.
一的构造几乎继承的基础,但是,通过的构造方法调用最派生类.所以在第二个例子中,FailsToDerive构造函数需要能够调用ClassSealer构造函数,因为它不是它的朋友所以不允许这样做ClassSealer.
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |