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)
不,您不必这样做。
...你不应该,因为这是没有好处的不必要的重复。如果这样做,至少使用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()没有从它的基础覆盖一个方法。