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

1 c++ inheritance abstract-class virtual-functions pure-virtual

在 C++ 中工作时,这更像是一个首选的样式问题。我正在寻找这方面的首选标准。

假设我有一个接口 A

class AInterface {
public:
    virtual ~AInterface() = default;
    virtual void a() = 0;
};
Run Code Online (Sandbox Code Playgroud)

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

class BInterface : public AInterface{
public:
    virtual void b() = 0;
    virtual void otherb() = 0;
};
Run Code Online (Sandbox Code Playgroud)

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

class BInterface : public AInterface{
public:
    virtual void a() = 0;
    virtual void b() = 0;
    virtual void otherb() = 0;
};
Run Code Online (Sandbox Code Playgroud)

for*_*818 5

不,您不必这样做。

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

想象一下,您将基数更改为

class AInterface {
public:
    virtual ~AInterface() = default;
    virtual void a(int) = 0;
};
Run Code Online (Sandbox Code Playgroud)

你忘了更新BInterface,那么哎呦,现在你有一个void a()BInterface这并不打算。但是,如果您有override

class BInterface : public AInterface{
public:
    virtual void a() override = 0;
    virtual void b() = 0;
    virtual void otherb() = 0;
};
Run Code Online (Sandbox Code Playgroud)

你会得到一个编译器错误,因为在上面的重构之后void a()没有从它的基础覆盖一个方法。