gpt4 book ai didi

C++多继承构造函数调用

转载 作者:行者123 更新时间:2023-11-28 08:07:00 25 4
gpt4 key购买 nike

在接下来的几行中,类 A 是基类,由类 B 和 C 继承。D 类同时继承自 B 和 C。此外,D 中的构造函数调用 B、C 和 A 的构造函数。因为当 B 和 C 以虚拟方式继承 A 时,它们没有资格直接调用 A 的构造函数(因为必须通过第 3 代调用相同的构造函数)。

我的问题是,如果我想创建类 B 的对象,那么由于 A 是虚拟继承的,是否可以调用 A 的构造函数(传递 v1 和 v2,用于初始化的变量)?

class A {
int a1,a2;
A() {
}

A(int v1,v2) {
a1 = v1;
a2 = v2;
}
};

class B:virtual public A {
int b1,b2;
B() {
}

B(int v1,v2) {
b1 = v1;
b2 = v2;
}
};

class C:virtual public A {
int c1,c2;
C() {
}

C(int v1,v2) {
c1 = v1;
c2 = v2;
}
};

class D:public B,public C {
int d1,d2;
D() {
}

D(int v1,v2):B(v1,v2),C(v1,v2),A(v1,v2)
{
d1 = v1;
d2 = v2;
}
};

最佳答案

也可以为 B 提供 A 的初始值设定项。虚拟继承的全部意义在于,如果您有一个派生更多的对象,那么虚拟基础由派生最多的对象构造。但是,如果您只是构建 B 的一个实例,那么该实例最派生的对象。所以就这样写吧:

 class B : public virtual A
{
public:
B() : A(1, 2) { }
// ...
};

只有当您B 派生时,基础初始化器才会被忽略。

关于C++多继承构造函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10103199/

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