C++接口:如何避免输入3次相同的方法名?

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次 - 这不仅麻烦,而且令人困惑。有没有更好的方法来做到这一点?

+7

没有,没有。什么让人困惑? – 2013-03-28 08:45:28

+0

因为在接口和头文件中声明了相同的方法。如果有人查看头文件,他怎么知道这个方法声明实际上是从基类继承的? – mort 2013-03-28 08:49:06

+0

将第二和第三个合并在一起键入两次。 – 2013-03-28 08:50:00

有没有办法避免这种情况(除非你写在头文件中的定义,正如其他人已经建议;为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?

+1

我真的很喜欢使用覆盖的解决方案! – mort 2013-03-28 09:01:54

不,没有什么好方法。
接口必须指定方法,因为它是它的合同的一部分。
标题必须指定方法来声明该类重写它。
源文件必须指定方法,以便编译器知道实现属于哪个方法。我不觉得这很迷惑。

减少OCCURENCES两个唯一的办法是实现在类的头的方法,但我会强烈反对这一点。