gpt4 book ai didi

c++ - 不执行参数化基类构造函数就存在中间类

转载 作者:行者123 更新时间:2023-11-30 03:50:08 25 4
gpt4 key购买 nike

我的代码:

class Parent
{
public: Parent() { cout << "Default Parent" << endl; }
Parent(int x) { cout << "Parameterized Parent" << endl; }
};
class Child1: virtual public Parent
{
public: Child1() :Parent(10) { cout << "Default Child1" << endl; }
};
class Child2: virtual public Parent
{
public: Child2() :Parent(10) { cout << "Default Child1" << endl; }
};
class GrandChild: public Child1, public Child2
{
public:
GrandChild() { cout << "Default GrandChild" << endl; }
};
int main()
{
GrandChild G;
return 0;
}

输出:

default Parent
default Child1
default Child2
default GrandChild

我知道这里最派生类调用Parent类默认构造函数,除非另有说明。

但为什么 ChildX 类的参数化 Parent 构造函数调用从未执行过?没有 ChildX 类,GrandChild 类将不存在(?)。如果没有参数化调用,将不会创建 ChildX 类(?)。

最佳答案

I know that here the most derived class calls the Parent class default constructor unless specified otherwise.

不止于此。最派生的类总是单独负责初始化虚基类。没有异常(exception)!

如果最派生类的构造函数没有为虚基类指定mem-initializer,则虚基类是默认构造的。 “中间”类是否为虚拟基类指定mem-initializers 并不重要。那些根本被忽略了。它们在该类是正在构造的最派生类时使用。

A mem-initializer where the mem-initializer-id denotes a virtual base class is ignored during execution of a constructor of any class that is not the most derived class.

(C++14 标准,[class.base.init]/7)

关于c++ - 不执行参数化基类构造函数就存在中间类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32016483/

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