我不明白为什么在下面的代码中,当我实例化一个类型为object的对象时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);}
2 回答
元芳怎么了
TA贡献1798条经验 获得超7个赞
使用虚拟继承时,最派生类的构造函数直接调用虚拟基类的构造函数。在这种情况下,daughter构造函数直接调用grandmother构造函数。
由于您没有grandmother在初始化列表中显式调用构造函数,因此将调用默认构造函数。要调用正确的构造函数,请将其更改为:
daugther(int attr) : grandmother(attr), mother(attr) { ... }
- 2 回答
- 0 关注
- 328 浏览
添加回答
举报
0/150
提交
取消