我有以下问题:
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 是困扰我的问题。
首先A1
来自(非虚拟)基础的(虚拟)基础初始化的结果AA1
of B
.
所有虚拟基地B
首先被初始化,并且按顺序,A1
, A2
and AA2
。 (初始化AA2
结果输出A1 AA2
.) 然后是直接基地,其中只有一个,AA1
(其初始化打印A2 AA1
),最后是类本身,打印B
。首先是所有虚拟基地,然后是剩余的非虚拟基地。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)