[英]Overriding C++ pure virtual functions
我有以下课程:
模式 class h 文件:
#pragma once
class Mode
{
public:
virtual int recv() = 0;
};
模式 class cpp 文件: -> 空
LocalMode class h-文件:
#pragma once
#include "Mode.h"
class LocalMode: public Mode
{
private:
public:
LocalMode();
int recv();
};
LocalMode class cpp 文件:
#include "LocalMode.h"
int LocalMode::recv(){
return 0;
}
以下是我的问题:
关键字“覆盖”是否总是必要的? 如果没有,最佳实践是什么?
主要问题:我知道上面的代码对我有用。 But I have the problem, that I basically have to "copy" the function signature of the pure virtual function out of the base class into my derived class. 如果我不知道基础 class 有哪些纯虚函数,会发生什么?
我上面的实现意味着我必须知道基础 class 中可用的所有纯虚函数。 我尝试通过 Mode:: scope 和 LocalMode:: scope 访问纯虚拟 function 但在 Visual Studio 中我只是收到一些错误消息(我认为这些错误消息与此无关)
一些插件/智能感知? 我记得在 java 中,IntelliSense 通常帮助我并从抽象 class 中添加了所需的功能。 虽然我知道 java 在这个意义上(从抽象类继承)与 c++ 有点不同,但我还想知道是否有任何工具可以帮助我自动包含这些工具?
浏览互联网我找不到任何例子。 他们都假设,基础 class 的所有纯虚函数都是已知的......我只是在想象,如果我有一个带有很多纯虚函数的抽象 class 并且我忘记复制其中一个,在实例化 I 时会报错...
先感谢您。
关键字“覆盖”是否总是必要的? 如果没有,最佳实践是什么?
它从来不是“必要的”。 无论是否使用此关键字,覆盖都有效。 它只是在这里帮助您防止诸如拼写错误等问题。
struct A
{
virtual int foo();
};
struct B: public A
{
int fooo(); //whoops, not overriding, no compiler error
};
struct C: public A
{
int fooo() override; //compiler error, compiler noticed my typo
};
因此,当您想要覆盖虚拟 function 时,最佳做法是始终使用override
关键字。
主要问题:我知道上面的代码对我有用。 But I have the problem, that I basically have to "copy" the function signature of the pure virtual function out of the base class into my derived class. 如果我不知道基础 class 有哪些纯虚函数,会发生什么?
你不能不知道。 要从 class 派生,编译器需要该 class 的完整定义,这通常意味着您有#include
d 它(并且您可以访问该定义)。
我上面的实现意味着我必须知道基础 class 中可用的所有纯虚函数。 我尝试通过 Mode:: scope 和 LocalMode:: scope 访问纯虚拟 function 但在 Visual Studio 中我只是收到一些错误消息(我认为这些错误消息与此无关)
您在寻找反射机制吗? 它在 C++ 中不存在,因此您无法获取给定 class 的 function 列表。 如果你想从另一个 function 调用纯虚拟 function,那是行不通的,因为它们是纯虚拟的。
一些插件/智能感知?
这对于 StackOverflow 来说显然是题外话,但是 C++ 的 IDE 有很多,您应该可以轻松找到它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.