首页 > 后端开发 > C++ > 为什么在虚拟继承中调用Grandmother类的默认构造函数?

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

DDD
发布: 2024-11-16 22:22:03
原创
925 人浏览过

Why is the Grandmother Class's Default Constructor Called in Virtual Inheritance?

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

使用虚拟继承创建子类的新对象时,默认构造函数意外地调用了祖母类。这种行为可能看起来违反直觉,考虑到用户显式地使用参数调用母类构造函数。

说明:

在虚拟继承中,虚拟基类的构造函数类由最底层派生类的构造函数直接调用。在给定的代码中,子类是最派生的类,因此,它直接调用祖母构造函数。

由于子类在初始化列表中没有为祖母构造函数提供任何参数,因此默认自动调用祖母类的构造函数。这是因为,默认情况下,编译器假定在没有调用特定构造函数时应使用默认构造函数。

解决方案:

调用所需的祖母构造函数使用参数时,必须显式更新子类构造函数的初始化列表。正确的代码是:

daughter(int attr) : grandmother(attr), mother(attr) { ... }
登录后复制

这确保使用指定的参数调用祖母构造函数。或者,祖母类可以提供一个接受参数的默认构造函数。

以上是为什么在虚拟继承中调用Grandmother类的默认构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板