C++接口:如何避免输入3次相同的方法名?
作为后续行动,以this question:如果我创建一个纯虚接口类和实现类分成头和源文件时,我得到如下:C++接口:如何避免输入3次相同的方法名?
接口:
class IDemo
{
public:
virtual ~IDemo() {}
virtual void OverrideMe() = 0;
};
实现类,头:
class Child : public IDemo
{
public:
virtual void OverrideMe();
};
实现类,来源:
void Child::OverrideMe()
{
//doStuff
}
所以我需要在接口中声明一个方法的名称3次 - 这不仅麻烦,而且令人困惑。有没有更好的方法来做到这一点?
有没有办法避免这种情况(除非你写在头文件中的定义,正如其他人已经建议;为Botz3000还建议 - 不这样做)。
这就是做这件事的方法。
,我决定写一个答案,根据您的评论:
我:
,什么是如此混乱
你:
如果有人看着标题,如何他是否知道这种方法的声明实际上是从基类
好继承,有两种方式 - 发表评论,比如:
/*
* This overrides Base::OverrideMe
*/
virtual void OverrideMe();
大多数编辑会告诉你这个评论,当你将鼠标光标放在上面。
的另一种方式做到这一点是使用C++11
,由函数后加入override
关键字:
class Child : public IDemo
{
public:
virtual void OverrideMe() override;
};
这可能是其他情况下很有用。您可能希望看到this part of the wiki article about C++11: override
参见:Is the 'override' keyword just a check for a overridden virtual method?
我真的很喜欢使用覆盖的解决方案! – mort 2013-03-28 09:01:54
不,没有什么好方法。
接口必须指定方法,因为它是它的合同的一部分。
标题必须指定方法来声明该类重写它。
源文件必须指定方法,以便编译器知道实现属于哪个方法。我不觉得这很迷惑。
减少OCCURENCES两个唯一的办法是实现在类的头的方法,但我会强烈反对这一点。
没有,没有。什么让人困惑? – 2013-03-28 08:45:28
因为在接口和头文件中声明了相同的方法。如果有人查看头文件,他怎么知道这个方法声明实际上是从基类继承的? – mort 2013-03-28 08:49:06
将第二和第三个合并在一起键入两次。 – 2013-03-28 08:50:00