2015-04-18 26 views
17

術語「方法」通常用於討論C++代碼。單獨的術語在C++中有明確的含義嗎?還是不明確?單獨使用該術語還是應該是合格的(例如,「類方法」或「虛擬方法」)還是應該完全避免?C++標準定義的術語「方法」是什麼?

+5

該規範使用像'功能','成員函數','虛函數',而不是方法。 – Nawaz

回答

5

我會完全避免這個術語,因爲它清楚你的意思是「成員函數」,而不是「方法」 - 你問這個問題是否足夠證明。

然而,在C++ 14標準中的 「方法」 一詞的規範出現的

  • 在內容列表:

    17.5 描述(信息)的方法

    這在該部分的標題中重複。

  • [basic.compound]:

    這些方法構造類型可以遞歸施加;

  • [cpp.include]

    的方法通過該預處理標記的<>之間的序列 預處理記號對或一對"字符被組合 成單頭名稱預處理令牌是實現定義的。

  • [library。一般]

    以下各節描述的定義(17.3),描述的方法(17.5),[..]

  • 在表32中,FLT_EVAL_METHOD被提及。

  • num_getdo_get的階段2:

    對於算術類型,punct.thousands_sep()字符插入 到序列通過使用在22.4中描述的方法通過 punct.do_grouping()返回的值來確定。 3.1.2

  • [forwardlist.modifiers]:

    否則,插入在 結束sz - distance(begin(), end())元素列表,使得每個新的元素,e,由初始化相當於調用allocator_traits<allocator_type>::construct(get_allocator(), std::addressof(e), c)的方法

  • [filebuf.virtuals]:

    根據 basic_streambuf<charT,traits>::uflow()的描述表現方式與該專業化字符的 序列從輸入讀取相同的方法作爲 由underflow使用。

術語顯然是從來沒有提到「成員函數」。

+0

這基本上覆制我的答案的一部分:*「一個簡單的谷歌搜索揭示這個術語的更多出現。 – cybermonkey

+4

@cybermonkey:這不是一個「答案」,bub。而這一個與這個詞語毫無相似之處。你確定你評論了正確的答案嗎? –

14

術語方法未在C++標準中定義。該術語使用成員函數代替。然而

Bjarne的Stroustrup的定義在他自己的glossary作爲虛擬成員函數術語方法。所以這表明該術語是可以接受的證據。

+0

很好的答案。但* virtual *成員函數與成員函數不同,更重要的是,它不是成員函數的默認值(默認情況下,它是非虛擬的)。 –

+0

這使得它更模糊。坦率地說,當我看到非標準術語中使用的「方法」時,我總是會考慮「成員函數」。 – vsoftco

+1

@GiulioFranco我同意。 OOp的通常定義是調用數據屬性和行爲方法。我不確定爲什麼Bjarne Stroustrup認爲它是虛擬的。他可能會引用一個隱含多態的方法定義(即與對象不相關的行爲)。 – Christophe

1

C++ standard沒有提到術語method。應該指出的是official C++ FAQ確實利用這個術語,而是描述了一個virtual函數;一個simple Google search揭示了這個術語的更多出現。

我從來沒有在IDE(Visual Studio)中看到過術語method,但我看過術語member function。在我看來,method是一個'一刀切'的術語。

1

術語方法在歷史上被用作對象過程的同義詞。考慮到,一個對象既有數據又有行爲,這就是被稱爲方法的行爲。 跟蹤向後,我可以找到參考一個MIT ALGOL版本當術語方法的用法的參考,AED-0

Quoting wikipedia

MIT ALGOL版本,AED-0,鏈接數據結構( 「plexes」,用 方言)直接使用程序,預先配置後來稱爲「消息」,「方法」和「成員函數」的內容。

多年來,方法一直是面向對象分析和設計和麪向對象編程的一個組成部分。現在,C++演化爲一種過程語言,它將C語言擴展爲具有面向對象功能的過程語言。 C具有結構的概念,數據元素被稱爲成員。請參閱Methods in C++。 爲了不打破沿襲,C++繼續將結構化和新類型的元素稱爲成員。

現在,爲了區分數據和功能,而不是引入新的術語,它將此術語擴展爲調用數據成員和成員函數。支持動態綁定的成員函數被稱爲虛函數。

因此,嚴格地說,官方引用在引用成員函數時不會使用術語方法。術語在擁有更多面向對象背景的人羣中最爲流行。所以,如果你想保持明確的,它是最好用的術語作爲

  • 數據成員
  • 成員函數
  • 虛函數
+1

請使用引號格式來說明這是多少這是你自己的話,其中有多少是由別人寫的。 –

+0

@LightningRacisinObrit:請詳細說明哪一部分不清楚?我已根據需要適當引用。 Downvoter:你能幫我理解哪一部分沒有幫助或不正確嗎? – Abhijit

+1

是什麼讓你認爲downvotes是「異想天開」或「沒有任何合適的理由」? –

1

這裏我分析關於字方法

我對幾種編程語言的官方文檔(標準,規範等)進行了掃描。

http://componentsprogramming.com/using-the-right-terms-method/

充足的分類(不依賴於任何編程語言)將刊登在以後的文章。

關於C++,正確的術語是:成員/非成員函數。 有些人使用會員/免費功能。

相關問題