gpt4 book ai didi

c++ - 具有公共(public)/私有(private)构造函数的虚拟基类行为差异

转载 作者:行者123 更新时间:2023-11-30 04:15:21 25 4
gpt4 key购买 nike

如果我运行这段代码

#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() 构造函数设为私有(private),编译器会显示错误消息。这种不同的构造函数调用层次结构基于什么?

最佳答案

引用:

C++ FAQs - virtual inheritance constructors http://www.parashift.com/c++-faq/virtual-inheritance-ctors.html

因为“大多数派生类的构造函数的初始化列表直接调用虚基类的构造函数”,所以你的最派生类需要直接调用虚基类的构造函数。因此,对于您想做的事情,您也需​​要使派生类最多的类成为 friend ...

另外,你好像没有正确理解虚继承。引用this FAQ了解虚拟继承的目的和正确使用。

关于c++ - 具有公共(public)/私有(private)构造函数的虚拟基类行为差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18379082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com