有没有办法"删除"纯虚函数?

5 c++ inheritance

我有一个带有几个纯虚函数的抽象类,我从它派生的类之一不使用纯虚函数之一:

class derivative: public base
{
public:
    int somevariable;
    void somefunction();
};
Run Code Online (Sandbox Code Playgroud)

无论如何,当我尝试编译它时,我得到一个错误(显然,如果从抽象类派生并且不覆盖所有纯虚函数,则仍然认为类是抽象的).无论如何,定义一个函数似乎毫无意义

int purevirtfunc(){return 0;}
Run Code Online (Sandbox Code Playgroud)

仅仅因为它需要通过技术性来定义.无论如何从抽象类派生一个类而不使用抽象类的纯虚函数之一?

小智 42

如果派生类没有"使用"基类纯虚函数,那么派生类不应该从基类派生,或者PVF不应该在那里.在任何一种情况下,您的设计都是错误的,需要重新考虑.

不,没有办法删除PVF.


jon*_*nii 14

纯虚拟类是一个接口,您的代码可以满足该接口.如果您实现了该接口并且没有实现其中一个方法会发生什么?调用您的界面的代码如何知道您没有实现该方法?

你的选择是:

  1. 按照您的描述实现方法(将其设为私有表示不应使用它).
  2. 更改类层次结构以考虑设计更改.


Bli*_*ixt 9

从抽象类派生的目的是外部代码可以使用抽象类并期望所有函数都已正确实现.能够实现一种方法会破坏这个目的,使代码无法编译.但是,如果您愿意,可以自由地抛出异常.


Rob*_*ert 5

这根本不是技术性问题.如果派生类没有展示父项的所有行为,则不应从父项派生它.这是一个主要的设计气味,你可能需要一些设计重构.