乐闻世界logo
搜索文章和话题

Do ALL virtual functions need to be implemented in derived classes?

6 个月前提问
5 个月前修改
浏览次数32

1个答案

1

不,所有虚函数并不一定都需要在派生类中实现。虚函数主要是用于实现多态性,允许在派生类中重新定义基类中的行为。当一个类中声明了虚函数后,派生类可以选择是否覆盖(override)这个虚函数。

如果派生类没有提供对虚函数的具体实现,那么派生类将继承其基类的实现。这是完全可以接受的,特别是当基类的实现对派生类也是适用的情况下。然而,在一些情况下,基类可能会提供一个默认的实现,或者不提供任何实现(即声明为纯虚函数),这就要求派生类必须提供一个具体的实现来满足接口的需求。

例如,考虑以下代码:

cpp
class Base { public: virtual void show() { std::cout << "Base implementation" << std::endl; } }; class Derived : public Base { // 没有覆盖 show() 函数 }; class AnotherDerived : public Base { public: void show() override { std::cout << "AnotherDerived implementation" << std::endl; } };

在这个例子中,Derived 类没有覆盖基类 Baseshow() 函数,所以它将继承 Base 类的实现。而 AnotherDerived 类提供了 show() 函数的一个新实现,覆盖了基类中的版本。

一个特别的情况是纯虚函数,这种函数声明如下:

cpp
virtual void pureVirtualFunction() = 0;

如果基类中有纯虚函数,那么任何派生类都必须提供这个纯虚函数的具体实现,除非派生类也被声明为抽象类。这种机制保证了派生类必须按照基类的设定提供某些行为的具体实现,从而保证了接口的完整性。

2024年6月29日 12:07 回复

你的答案