gpt4 book ai didi

c++ - 有趣的 C++ 抽象函数

转载 作者:太空狗 更新时间:2023-10-29 19:45:12 24 4
gpt4 key购买 nike

为什么会这样?

当你在 C++ 中创建抽象类时 Ex: Class A (它有一个纯虚函数)之后 class B 继承自 class A

并且如果 A 类 有一个名为 A() 的构造函数假设我创建了一个B类对象,然后编译器首先初始化基类,即A类,然后初始化B类 那么……?

首先,我们不能访问任何没有对象的类的构造函数,然后如果我们不能创建抽象类的对象,它如何初始化抽象类的构造函数。

最佳答案

快速回答:构造函数很特别。

当 A 的构造函数仍在运行时,则正在构造的对象还不是真正的 A 类型。它仍在构造中。当构造函数完成时,它现在是一个 A。

派生的B也是一样,A的构造函数先运行。现在是 A。然后 B 的构造函数开始运行。在此期间,该对象仍然是一个真正的 A。只有当 B 的构造函数完成时,它才成为一个 B。

您可以通过尝试从构造函数中调用纯虚函数来验证这一点。如果该函数定义在 A 中,而 B 的构造函数调用它,则会出现运行时错误,而不是运行 B 的重写,因为该对象还不是 B 类型。

由于是纯虚函数,编译器不允许您生成构造 A 的代码。但它会生成代码来构建 A,作为构建 B 过程的一部分。这并不涉及魔法。不能构造 A 的规则是由语言规则强加的,而不是由物理学强加的。在构造 B 的对象的特殊情况下,该语言取消了该规则。

关于c++ - 有趣的 C++ 抽象函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/365048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com