Я не розумію, чому в наступному коді, коли я інстанцирую об'єкт типу daughter
, grandmother()
викликається конструктор за замовчуванням ?
Я думав, що або grandmother(int)
конструктор слід викликати (щоб дотримуватися специфікації конструктора мого mother
класу), або цей код взагалі не повинен компілювати через віртуального успадкування.
Тут компілятор мовчки викликає grandmother
конструктор за замовчуванням в мою спину, тоді як я ніколи про нього не просив.
#include <iostream>
class grandmother {
public:
grandmother() {
std::cout << "grandmother (default)" << std::endl;
}
grandmother(int attr) {
std::cout << "grandmother: " << attr << std::endl;
}
};
class mother: virtual public grandmother {
public:
mother(int attr) : grandmother(attr) {
std::cout << "mother: " << attr << std::endl;
}
};
class daughter: virtual public mother {
public:
daughter(int attr) : mother(attr) {
std::cout << "daughter: " << attr << std::endl;
}
};
int main() {
daughter x(0);
}