2013-07-31 38 views
4

在聲明和實現在C類或結構++中,我們一般做:替代實現語法上C級成員++

.h文件

namespace Space{ 
    class Something{ 
    void method(); 
    } 
} 

CPP文件

void Space::Something::method(){ 
    //do stuff 
} 

OR

namespace Space{ 
    void Something::method(){ 
    //do stuff 
    } 
} 

請注意,如何將所有實現封裝在命名空間塊中,以便我們不需要在每個成員之前寫入Space ::有沒有辦法以類似的方式包裝類成員?

請注意我想保持源文件和頭文件分開。這通常是一個好習慣。

+1

「班員」究竟是什麼意思? – jrok

+0

方法和模板基本上。 – Xocoatzin

回答

1

如果保留.cpp文件,則不能。

否則,你可以,但你基本上只是放棄.cpp文件。

在您的.h文件中,你可以有:

namespace Space{ 
    class Something{ 
    void method() 
    { 
     //Method Logic 
    } 
    }; 
} 

除此之外,你也知道,會有侷限性的地方,你可以包含頭。

我不敢肯定,這將幫助你的,OP,你似乎知道你在做什麼,但我會包括它的問題的未來用戶:

What should go into an .h file?

2

是:

.h文件:

namespace Space{ 
    class Something{ 
    void method() 
    { 
     // do stuff 
    } 
    }; 
} 

我不建議這樣做,雖然。

+0

這將做到這一點。但是,正如比爾所暗示的那樣,這可能是不好的做法。您需要將頭文件和實現文件分開。 –

+0

這樣寫起來很方便,但仍然有一個很好的理由將實現保留在自己的CPP文件中。 – Xocoatzin

+0

@Xocoatzin:正是我爲什麼不推薦它。我喜歡分離聲明和定義。 – Bill

3

不犧牲頭和實現(cpp)文件之間的分離。

你可以聲明類內部頭部的所有內容,但是對於大類來說,它是非常的凌亂。

你真的想要解決什麼問題?還是隻是打字時間? :)

+0

是不是它導致任何問題,我在H文件上聲明方法,然後我通常將這些行復制到源文件,但我剛剛發現自己添加了* Classname :: *這麼多次,它已成爲麻煩。我只是想知道是否有方法來包裝名稱空間,可能有一種方法來包裝類。 – Xocoatzin

1

不,除非你把類成員直接到類定義

class Something 
{ 
    void method() {} 
}; 

這是氣餒,因爲它會導致臃腫頭,如果你的類定義是在頭文件。

我不希望自己使用包裝方法,因此每個函數體都顯式聲明它的名稱空間。這有助於檢測拼寫錯誤或死代碼,如果您刪除原型。