C++ 具有公共/私有构造函数行为差异的虚拟基类
如果我运行这个代码C++ 具有公共/私有构造函数行为差异的虚拟基类,c++,compiler-construction,constructor,C++,Compiler Construction,Constructor,如果我运行这个代码 #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
#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;
}
#包括
使用名称空间std;
期末考试;
班级决赛{
公众:
朋友班决赛;
MakeFinal(){cout参考:
由于“最派生类的ctor的初始化列表直接调用虚拟基类的ctor”,因此,最派生类需要直接调用虚拟基类的构造函数。因此,要想做什么,也需要让最派生类成为朋友
此外,您似乎没有正确理解虚拟继承。请参阅以了解虚拟继承的目的和正确使用。如果您的类A
具有私有构造函数,则无法像这样创建此类的对象A
:
当创建从A
派生的类b
的对象b
时,还必须调用基类构造函数。如果它是私有的,则不能调用它,也不能创建派生对象。如果基类构造函数是私有的,则除了友元类(或类本身)之外,没有其他对象可以创建一个,包括通过继承。除了可怕的格式设置之外,为什么在这段代码中首先使用虚拟继承?您了解虚拟继承可以帮助解决哪些问题吗?
A a;