gpt4 book ai didi

c++ - 虚拟继承中的构造函数调用顺序

转载 作者:IT老高 更新时间:2023-10-28 21:47:13 28 4
gpt4 key购买 nike

class A {
int i;
public:
A() {cout<<"in A's def const\n";};
A(int k) {cout<<"In A const\n"; i = k; }
};

class B : virtual public A {
public:
B(){cout<<"in B's def const\n";};
B(int i) : A(i) {cout<<"in B const\n";}
};

class C : public B {
public:
C() {cout<<"in C def cstr\n";}
C(int i) : B(i) {cout<<"in C const\n";}
};

int main()
{
C c(2);
return 0;
}

这种情况下的输出是

in A's def const
in B const
in C const

为什么这没有进入 in A const

`它应该遵循 1 arg 构造函数调用的顺序。但是使用 virtual 关键字从 A 派生 B 实际发生了什么。

还有几个问题

即使我删除了上述程序中的 virtual 关键字并删除了所有默认构造函数,它也会出错。那么,为什么它需要 def 构造函数

最佳答案

虚拟基类的构造函数总是从最派生类调用,使用它可能传入的任何参数。在您的情况下,最派生类没有为 A 指定初始化程序,所以使用默认构造函数。

关于c++ - 虚拟继承中的构造函数调用顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10534228/

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