纯虚函数的继承问题咨询:派生类是否同时存在重写与继承的纯虚函数?
纯虚函数继承与重写的问题解答
结论:派生类B中并不会同时存在重写的display函数和继承自A的纯虚display函数,具体原因可以从C++虚函数机制的本质来理解:
- 当派生类重写基类的纯虚函数时,这是一种**接口覆盖(override)**行为,而非新增同名函数。基类的纯虚函数只是定义了一个必须被实现的抽象接口,派生类完成重写后,这个接口就被派生类的具体实现所替代,不会在派生类中保留基类纯虚函数的独立存在。
- 基类的纯虚函数本身没有函数体,它的作用是强制派生类提供实现。一旦派生类B重写了
display,B就不再是抽象类,可以正常实例化对象;如果B没有重写,那它会继承基类的纯虚属性,成为抽象类,无法实例化。 - 你可以通过实际代码验证:创建B的对象
B b;并调用b.display();,只会输出Always,这说明此时调用的是B自身重写的函数,不存在所谓“继承自A的纯虚display函数”可供调用——纯虚函数没有实现,也不会在派生类中作为独立函数存在。
额外区分一个容易混淆的概念:这里的重写和函数重载完全不同。重载是同一作用域下同名但参数列表不同的函数,而重写是派生类对基类虚函数的接口实现,二者作用域不同,且重写会覆盖基类虚函数在虚表中的条目。
内容的提问来源于stack exchange,提问作者amm98d
相关产品推荐
相关产品推荐

