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

When inheriting from an abstract class to create another abstract class should I redeclare all virtual functions?

本文关键字:抽象类 声明 函数 新声明 创建 继承 另一个 我应该      更新时间:2023-10-16

这更像是使用 c++ 工作时的首选样式问题。我正在寻找有关此的首选标准。

假设我有一个接口 A

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

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

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;
};

No.你不必这样做。

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

假设您将底座更改为

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

而且您忘记更新BInterface,然后哎呀,现在您在BInterface中有一个不是故意的void a()。但是,如果您有override

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

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

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