我有以下问题:
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
。我知道在非虚拟类之前先调用虚拟类的规则,但是首先要考虑的问题是困扰我的问题。
最佳答案
第一个A1
是由AA1
的(非虚拟)基础B
的(虚拟)基础的初始化产生的。
首先初始化B
的所有虚拟基础,它们的顺序是A1
,A2
和AA2
。 (对AA2
的初始化导致输出A1 AA2
的输出。)然后是直接的基数,其中只有一个直接基数AA1
(其初始化显示A2 AA1
),最后是类本身,则输出B
。所有虚拟基础都首先出现,然后仅是其余的非虚拟基础。
关于c++ - 虚拟基类的创建顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48626626/