首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在虚拟继承中调用默认构造函数?

为什么在虚拟继承中调用默认构造函数?
EN

Stack Overflow用户
提问于 2012-03-28 20:42:15
回答 1查看 17.2K关注 0票数 83

我不明白为什么在下面的代码中,当我实例化一个daughter类型的对象时,会调用默认的grandmother()构造函数?

我认为要么应该调用grandmother(int)构造函数(以遵循我的mother类构造函数的规范),要么根本不应该编译这段代码,因为它是虚拟继承。

在这里,编译器在我背后默默地调用grandmother默认构造函数,而我从来没有要求过它。

代码语言:javascript
复制
#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);
}
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9907722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档