【问题标题】:Who calls constructor in virtual inheritance? [duplicate]谁在虚拟继承中调用构造函数? [复制]
【发布时间】:2011-01-05 10:40:17
【问题描述】:
#include<iostream>

class base{
public:
base(){std::cout<<"In base";}
};

class dv1:virtual private base {
public:
dv1(){std::cout<<"In DV1";}
};

class dv2:virtual private base {
public:
dv2(){std::cout<<"In DV2";}
};

class drv : public dv1, public dv2 {
public:
drv() {std::cout<<"Why is this working";}
};

int main() {
drv obj;

return 0;
}

在虚拟继承的情况下,调用构造函数不是大多数派生类的责任吗? 注意:这里的 base 是虚拟和私人继承的。

【问题讨论】:

  • 输出与您的预期是什么?如果您期待不同的东西,我建议您返回并重新访问有关继承的章节并尝试首先理解这一点。
  • 我希望它不会编译,因为基础是虚拟和私人派生的。

标签: c++ object virtual multiple-inheritance vtable


【解决方案1】:

drv 的构造函数没有显式调用其基类的构造函数,因此编译器将生成对基类的无参数构造函数的调用

【讨论】:

  • 没错……但它怎么能做到呢?
  • base::base() 是公开的,所以drv 可以访问这个构造函数。 basedv1dv2 的私有基础这一事实无关紧要。
猜你喜欢
  • 2015-06-21
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2013-10-24
相关资源
最近更新 更多