首页 > 后端开发 > C++ > 为什么虚拟函数在 C 对象初始化期间表现异常?

为什么虚拟函数在 C 对象初始化期间表现异常?

Linda Hamilton
发布: 2024-12-11 13:22:16
原创
783 人浏览过

Why Do Virtual Functions Behave Unexpectedly During C   Object Initialization?

了解 C 中的继承和对象初始化以实现虚拟函数访问

在 C 中,继承允许创建继承属性和行为的派生类来自基类。然而,C 中对象的初始化顺序会影响虚函数的行为。

问题:

当在 C 中使用具有 virtual 的基类构造对象时函数,为什么该函数会表现出来出乎意料吗?

答案:

这里的关键概念是基类和派生类的初始化顺序。在 C 中,基类在派生类之前构造。

说明:

在提供的示例中:

  • 基类定义了一个默认返回0的虚函数value()。
  • 衍生继承自base并覆盖value()函数返回 1。
  • 在实例化时,它首先构造对象的基础部分。
  • 但是,此时该对象还不是一个完整的派生实例,因为派生类构造函数尚未执行。
  • 因此,当基构造函数调用 value() 时,它会调用该函数的基版本而不是重写的派生版本,从而导致输出为 0。

要纠正此行为:

为了确保在对象构造期间调用派生类的 value() 函数,您应该使用派生类实例的地址显式初始化基类:

通过传递派生对象的地址,您可以指示基本构造函数在派生对象上调用 value() 函数,有效地将对象“成熟”为其完整的派生形式。

以上是为什么虚拟函数在 C 对象初始化期间表现异常?的详细内容。更多信息请关注PHP中文网其他相关文章!

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