【发布时间】:2020-08-21 08:45:52
【问题描述】:
我有以下课程:
模式类 h 文件:
#pragma once
class Mode
{
public:
virtual int recv() = 0;
};
模式类 cpp 文件: -> 空的
LocalMode 类 h 文件:
#pragma once
#include "Mode.h"
class LocalMode: public Mode
{
private:
public:
LocalMode();
int recv();
};
LocalMode 类 cpp 文件:
#include "LocalMode.h"
int LocalMode::recv(){
return 0;
}
这是我的问题:
关键字“覆盖”是否总是必要的?如果没有,最佳做法是什么?
-
主要问题: 我知道上面的代码对我有用。但是我有一个问题,我基本上必须将纯虚函数的函数签名从基类“复制”到派生类中。如果我不知道基类有哪些纯虚函数,会发生什么?
我上面的实现意味着我必须知道基类中所有可用的纯虚函数。 我尝试通过 Mode::scope 和 LocalMode::scope 访问纯虚函数,但在 Visual Studio 中我只是收到了一些错误消息(我认为这些错误消息与这个问题无关)。
一些插件/智能感知? 我记得在 java IntelliSense 中通常帮助我并从抽象类中添加了所需的函数。虽然我知道 java 在这个意义上(从抽象类继承)与 c++ 有点不同,但我还想知道是否有任何工具可以帮助我自动包含这些?
浏览互联网我找不到任何示例。他们都假设,基类的所有纯虚函数都是已知的...... 我只是在想象,如果我有一个带有很多纯虚函数的抽象类,而我忘记只复制其中一个,那么在实例化时我会得到一个错误......
提前谢谢你。
【问题讨论】:
-
1.
override告诉编译器检查基类是否具有完全匹配的虚函数。所以,override让编译器帮助你。 2. 如果你不知道基类,你就没有它的声明。 (否则,你可以看看它。)如果你没有decl。对于基类,您无法编译派生的。 (编译器也需要基类声明。)
标签: c++ inheritance abstract-class pure-virtual