2013-03-28 153 views
2

作爲後續行動,以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

回答

4

有沒有辦法避免這種情況(除非你寫在頭文件中的定義,正如其他人已經建議;爲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

2

不,沒有什麼好方法。
接口必須指定方法,因爲它是它的合同的一部分。
標題必須指定方法來聲明該類重寫它。
源文件必須指定方法,以便編譯器知道實現屬於哪個方法。我不覺得這很迷惑。

減少OCCURENCES兩個唯一的辦法是實現在類的頭的方法,但我會強烈反對這一點。

相關問題