class ClassSealer {
private:
friend class Sealed;
ClassSealer() {}
};
class Sealed : public ClassSealer
{
// ...
};
class FailsToDerive : public Sealed
{
// This class is capable of being instantiated
};上面没有封上类,但是下面的作品,为什么?
class ClassSealer {
private:
friend class Sealed;
ClassSealer() {}
};
class Sealed : public virtual ClassSealer
{
// ...
};
class FailsToDerive : public Sealed
{
// Cannot be instantiated
};这里发生了什么事?虚拟继承在这里扮演什么角色?
发布于 2015-11-21 10:01:16
对于正常继承,派生类的构造函数只调用直接基类的构造函数。因此,在第一个示例中,FailsToDerive的构造函数调用Sealed的构造函数,后者反过来调用ClassSealer的构造函数,这是允许的。
然而,几乎继承的基的构造函数由大多数派生类的构造函数调用。因此,在第二个示例中,FailsToDerive的构造函数需要能够调用ClassSealer的构造函数,这是不允许的,因为它不是ClassSealer的朋友。
https://stackoverflow.com/questions/33841954
复制相似问题