如果我运行此代码
#include<iostream>
using namespace std;
class Final;
class MakeFinal{
public:
friend class Final;
MakeFinal(){cout<<"makefinal\n";}
};
class Final: public virtual MakeFinal{
public:
Final(){cout<<"Final\n";}
};
class Derived:public Final{
public:
Derived(){cout<<"Derived\n";}
};
int main(){
//Final f;
Derived d;
return 0;
}
输出是:
makefinal 最后 衍生
但是如果我将MakeFinal()构造函数设为私有,则编译器会显示错误消息。什么是基于?
的不同构造函数调用层次结构答案 0 :(得分:1)
参考:
C++ FAQs - virtual inheritance constructors http://www.parashift.com/c++-faq/virtual-inheritance-ctors.html
由于&#34;大多数派生类的ctor的初始化列表直接调用虚拟基类的ctor。 &#34;,您最需要直接调用虚拟基础的构造函数。因此,对于你想要做的事情,你也需要让最派生的阶级成为朋友......
此外,您似乎无法正确理解虚拟继承。请参阅this FAQ以了解虚拟继承的目的和正确用法。
答案 1 :(得分:1)