У меня следующая проблема:Виртуальные базовые классы Порядок создания
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 - проблема, которая беспокоит меня.
Можете ли вы улучшить форматирование кода для удобства чтения? – WhiZTiM
Виртуальные классы не называются. Вы не можете «вызвать класс». Скорее, * объекты инициализируются *. –
Вы правы, я допустил ошибку. Спасибо за объяснение. –