最佳答案
我不明白为什么在下面的代码中,当我实例化一个类型为 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);
}