在處理C++代碼時,我確實遇到了一些困難。假設我有一個方法做X,Y,然後是Z.現在我想介紹另一種應該做X,Y',Z的方法。如果這是簡單的舊C代碼,我會然後用通用代碼生成函數X()和Z(),聲明它們以便編譯器現在可以根據需要內聯它們,因爲沒有代碼可以從這個「模塊」中調用它們。那是API的一部分,然後,該方法看起來像在C++中將常用塊提取到函數中
int M(args) {
X(foo); // that could e.g. be "check args are valid".
/* here comes M-specific code */
Z(bar); // that could e.g. be "update_state"
}
int M2(args) {
X(foo);
/* here comes M2-specific code */
Z(bar);
}
現在,如果我做同樣的在C++中,X()和Z()不再具有訪問類的保護/私有成員。在.h和.cc文件之間進行交換以聲明這些「helper」X()和Z(),因爲我繼續進行代碼寫作時不知何故試圖讓我只是複製/粘貼通用代碼,所以我傾向於複製而不是類,在.h中更接近(java)接口的東西 - 幾乎沒有成員變量 - 然後在.cc文件中的class
塊中包含變量,API方法和「幫助程序」方法,它們從「接口」。然而,我懷疑這是C++的好習慣,所以我很想知道其他人在這種情況下做了什麼。
有趣的問題。我總是發現C++中的類聲明在抽象和信息隱藏方面表現不佳。 –
頭部中的類不需要是具有實現的類。您可以使用抽象基類或pImpl慣用法將兩者分開。那麼實現可以完全在.cc中。 –
@Alan筆畫:抽象基類或pimpl習語是繁瑣的方法,當我只是想隱藏一個私人成員的視圖。 –