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

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

DDD
DDD原创
2024-11-16 22:22:03931浏览

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

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

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

说明:

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

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

解决方案:

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

daughter(int attr) : grandmother(attr), mother(attr) { ... }

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

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn