从抽象类继承以创建另一个抽象类时,我应该重新声明所有虚函数吗?

问题描述 投票:1回答:2

这是在c ++中工作时更喜欢的样式问题。我正在寻找与此相关的首选标准。

说我有一个接口A

class AInterface {
public:
    virtual ~AInterface() = default;
    virtual void a() = 0;
};

然后我在A之上建立了另一个接口B

class BInterface : public AInterface{
public:
    virtual void b() = 0;
    virtual void otherb() = 0;
};

我的问题是我应该像这样从B中的AInterface重新声明所有虚函数吗?

class BInterface : public AInterface{
public:
    virtual void a() = 0;
    virtual void b() = 0;
    virtual void otherb() = 0;
};
c++ inheritance abstract-class virtual-functions pure-virtual
2个回答
5
投票

没有您不必。

...而且您不应该,因为这是不必要的重复而没有好处。如果这样做,请至少使用override关键字来避免声明中的不匹配。

想象您将基准更改为

class AInterface {
public:
    virtual ~AInterface() = default;
    virtual void a(int) = 0;
};

并且您忘了先更新BInterface,然后更新,现在void a()中有一个原本不想要的BInterface。但是,如果您有override

class BInterface : public AInterface{
public:
    virtual void a() override = 0;
    virtual void b() = 0;
    virtual void otherb() = 0;
};

您会收到编译器错误,因为在上述重构之后,void a()不会从其基础覆盖方法。


0
投票

如果要从基类的功能中更改虚拟功能,则只能在后续类中重新声明/定义这些虚拟功能。也就是说,您给出的示例都是纯虚拟类,因此您无法实例化它们。但是通常,继承的要点之一是您不必不断地重新声明对派生类执行相同操作的函数。

© www.soinside.com 2019 - 2024. All rights reserved.