2011-04-11 63 views
0

我不熟悉C++就足夠了解那些2個非常相似的重構(引入本地擴展並引入外部方法)的地方。我知道那些強制使用這些的案例,但我無法確定需要這種「技巧」的示例類。我正在製作C++重構教程,以幫助新開發人員,但它看起來像我需要你的幫助:)C++哪裏需要本地擴展或外部方法?

如果你使用它,請告訴我在哪裏和爲什麼。提前致謝。

+0

我不熟悉術語(「本地擴展」,「外部方法」),但爲什麼你認爲這將是C++獨有的? – 2011-04-11 19:37:12

+0

@Oli我需要知道是否有一些pupular類,沒有使用某些重要的或常用的功能,需要以這種方式添加,所以它會使那些經常與THAT類一起使用的重構。 – dantuch 2011-04-11 19:43:17

+0

是什麼?也許這只是我,但你正在使*零*感。這些重構是什麼,如果你不知道他們需要的情況,那麼你爲什麼認爲他們在教程中有一席之地? (以及爲什麼你認爲你的教程會幫助新的程序員?儘管作者無法知道它會在哪裏發揮作用,但是它迫使*強制重構到C++上,聽起來不像是一個教程閱讀器是一個更好的程序員) – jalf 2011-04-11 21:26:07

回答

1

「外部」方法是對類進行操作的方法,但不是類的成員。在Java中,這僅僅意味着其他類的(靜態)方法將第一個類作爲參數。在C++中,您需要知道免費函數。與Java不同,C++中的方法可以存在於類之外。 int main()是最有名的一個。 STL還包含免費功能。只是單獨看一眼。

對於Java,您鏈接的站點建議"foreign methods are a work-around"並建議將「引入本地擴展」作爲替代重構。在C++中,免費函數不是解決方法。這意味着引入本地擴展的壓力要小得多。

此外,在C++中,函數默認情況下不是虛擬的,而且對象通常是按值傳遞的。這意味着「引入本地擴展」技術常常失敗。我希望這會顯示你的方法的基本問題:你正在爲Java重構技術,它解決了特定的Java弱點,並試圖將它們轉換成C++,它有一組相當不同的缺點。即使它在工作的地方,通常也是不必要的。

+0

謝謝,但我需要問一些問題。所以如果一個方法在類之外(在C++中),我不必提及「它應該屬於哪裏」。添加一些可以告訴「應該用該類封裝的東西,但它有一些不是,所以這個方法只是在這裏,而不是在那裏(它應該在哪裏)。你如何在C++中處理Java情況下的情況解決方法是必須的?**應該怎麼做,才能得到清晰的代碼?** – dantuch 2011-04-12 08:35:01

+1

@dantuch:您繼續使用Java假設。在C++中,您可以在類之外使用免費函數。這不僅意味着代碼可以在類之外,但通常它應該是。當您編寫的代碼不是該類的基本代碼時,尤其如此,例如這些擴展方法。然後沒有意義的文件記錄方法是在這裏,它應該在哪裏。 – MSalters 2011-04-12 08:39:50

+0

所以那些2重構技術應該標記爲「不讀取!」對於C++開發人員? – dantuch 2011-04-12 08:49:11