【发布时间】:2026-02-14 16:25:01
【问题描述】:
我有以下问题:
struct A1 {
A1() { std::cout << "A1, "; }
};
struct A2 {
A2() { std::cout << "A2, "; }
};
struct AA1 : virtual A1, A2 {
AA1() { std::cout << "AA1, "; }
};
struct AA2 : A1, virtual A2 {
AA2(){ std::cout << "AA2, "; }
};
struct B : AA1, virtual AA2 {
B() { std::cout << "B "; }
};
int main() {
B b;
}
当你运行这段代码时,答案是:
A1 A2 A1 AA2 A2 AA1 B
我想知道第一个 A1 是在哪里创建的。
我知道虚拟类在非虚拟类之前调用的规则,但第一个 A1 是困扰我的问题。
【问题讨论】:
-
您能否改进您的代码格式以便于阅读?
-
虚拟类不被“调用”。你不能“叫一个班级”。相反,对象被初始化。
-
你是对的,我犯了一个错误。谢谢你的解释。
标签: c++ constructor multiple-inheritance virtual-inheritance order-of-execution