为什么虚拟继承中会调用默认构造函数?
使用虚拟继承创建子类的新对象时,默认构造函数意外地调用了祖母类。这种行为可能看起来违反直觉,考虑到用户显式地使用参数调用母类构造函数。
说明:
在虚拟继承中,虚拟基类的构造函数类由最底层派生类的构造函数直接调用。在给定的代码中,子类是最派生的类,因此,它直接调用祖母构造函数。
由于子类在初始化列表中没有为祖母构造函数提供任何参数,因此默认自动调用祖母类的构造函数。这是因为,默认情况下,编译器假定在没有调用特定构造函数时应使用默认构造函数。
解决方案:
调用所需的祖母构造函数使用参数时,必须显式更新子类构造函数的初始化列表。正确的代码是:
daughter(int attr) : grandmother(attr), mother(attr) { ... }
这确保使用指定的参数调用祖母构造函数。或者,祖母类可以提供一个接受参数的默认构造函数。
以上是为什么在虚拟继承中调用Grandmother类的默认构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!