当前位置:  开发笔记 > 编程语言 > 正文

有趣的C++抽象函数

如何解决《有趣的C++抽象函数》经验,为你挑选了1个好方法。

为什么会这样?

当您在C++ Ex:Class A(具有纯虚函数)中创建抽象类之后,该类继承自A

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

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



1> Daniel Earwi..:

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

当A的构造函数仍在运行时,正在构造的对象尚未真正属于类型A.它仍在构造中.当构造函数完成时,它现在是A.

对于派生的B,它是相同的.A的构造函数首先运行.现在它是A.然后B的构造函数开始运行.在此期间,对象仍然是真正的A.只有当B的构造函数完成时,它才会成为B.

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

由于纯虚函数,编译器不允许生成构造A的代码.但它会生成代码来构造A作为构建B的过程的一部分.这里没有任何魔法.你不能构造A的规则是由语言规则强加的,而不是物理规则.语言在构建B对象的特殊情况下提升了规则.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有