从抽象类继承以创建另一个抽象类时,我应该重新声明所有虚函数吗?
When inheriting from an abstract class to create another abstract class should I redeclare all virtual functions?
这更像是使用 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()
不会从其基中重写方法。
只有当您打算从基类更改虚拟函数的功能时,您才会在后续类中重新声明/定义虚函数。 也就是说,您给出的示例都是纯虚拟类,因此您无法实例化它们。但一般来说,继承的要点之一是不必不断地重新声明对派生类执行相同操作的函数。
相关文章:
- 无法创建抽象类的实例
- c++类声明时,相同的例程,不同的成员变量类型
- 用pybind11包装C++抽象类时出错
- 如何在C++中获取该对象的类声明中对象的地址?
- 抽象类错误,请参阅声明" "是抽象的
- 从抽象类继承以创建另一个抽象类时,我应该重新声明所有虚函数吗?
- 如何在C++中声明抽象类的向量列表?
- 何时在抽象类 cpp 中声明受保护的字段
- 抽象类 A 由类 C 继承"through"类 B "intermediary"。如何声明虚拟功能?
- 如何在不指定模板类型的情况下声明通用抽象类的对象
- 抽象类声明
- 我如何在抽象类中声明一个超载的运算符,并在派生的非抽象类中覆盖它
- 我们可以通过在C++中的类中使用关键字“abstract”使所有方法抽象来声明接口类吗
- 是否可以在C++/CLR中实现一个用C#声明的抽象类
- 继承错误 - 无法实例化抽象类 无法访问在类中声明的受保护成员
- 无效地使用不完整的类型/前向错误声明.可能误用抽象类?(c++)
- 使用声明实现这个抽象类
- 抽象类和虚方法问题:不能将变量' list '声明为抽象类型' aStack
' aStack - c++中的抽象类声明
- 为什么我应该为C++中的抽象类声明一个虚拟析构函数