Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有公共/私有构造函数行为差异的虚拟基类_C++_Compiler Construction_Constructor - Fatal编程技术网

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;