首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中的密封类与虚拟继承

C++中的密封类与虚拟继承
EN

Stack Overflow用户
提问于 2015-11-21 09:51:45
回答 1查看 206关注 0票数 3
代码语言:javascript
复制
class ClassSealer {
private:
   friend class Sealed;
   ClassSealer() {}
};
class Sealed : public ClassSealer
{ 
   // ...
};
class FailsToDerive : public Sealed
{
   // This class is capable of being instantiated
};

上面没有封上类,但是下面的作品,为什么?

代码语言:javascript
复制
class ClassSealer {
private:
   friend class Sealed;
   ClassSealer() {}
};
class Sealed : public virtual ClassSealer
{ 
   // ...
};
class FailsToDerive : public Sealed
{
   // Cannot be instantiated
};

这里发生了什么事?虚拟继承在这里扮演什么角色?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-21 10:01:16

对于正常继承,派生类的构造函数只调用直接基类的构造函数。因此,在第一个示例中,FailsToDerive的构造函数调用Sealed的构造函数,后者反过来调用ClassSealer的构造函数,这是允许的。

然而,几乎继承的基的构造函数由大多数派生类的构造函数调用。因此,在第二个示例中,FailsToDerive的构造函数需要能够调用ClassSealer的构造函数,这是不允许的,因为它不是ClassSealer的朋友。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33841954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档