如果我在C語言中編寫抽象數據類型,那麼寫入的函數是爲了對這些數據類型執行操作而暴露在接口(.h文件)中,這些函數被稱爲函數,方法,還是完全不同的東西?我似乎無法在任何地方找到有建設性的答案。是方法一個C++的特定術語?函數或方法?
函數或方法?
回答
方法是C++特有的術語嗎?
「方法」是面向對象的程序設計術語,指的是作爲對象命名空間一部分的函數。因此,您可以使用C++,Java,Objective-C等語言爲對象創建方法。另一方面,您仍然擁有獨立的函數,而不是方法。
請記住,類方法的「官方」C++術語是「成員函數」,並在規範的第9.3節中進行了描述。
方法通常用於描述作爲OOP中類的一部分的「函數」。函數就是這樣 - 函數,而不是類的一部分。
在.h文件中,我將它們稱爲「函數聲明」,在.c中,我將它們稱爲「函數實現」......我不是專家,只是我的.02。
方法是與類相關的函數。由於C中不存在類,所以在技術上一切都是函數。
我不認爲這是一個特別有用的區別之作,但在一般情況下,你會打電話給他們功能因爲這個詞方法意味着一大堆的面向對象的東西,C不提供。像the following:
方法已在運行時,他們可以訪問存儲在類(或類實例或類 對象或對象)的實例 數據他們正在與相關聯,並因此能夠在特殊屬性到 控制實例的狀態。
誰Java的長大,但我經常聽到人們引用C 功能爲方法,我從來沒有一次被混淆關於他們的意思。一點兒都沒有。
你可能會,但是,要進行以下(寬鬆)的區別:
一個過程是一個代碼塊做一些事情
一個功能是一個過程將一個或多個輸入與輸出相關聯
A 方法是屬於某個類或該類的一個實例的過程
嚴格地說,函數是一種爲給定輸入提供輸出的操作。而方法是綁定到類型的函數。 C只有功能,我認爲你沒有什麼不同。
但是,如果您正在通過將函數指針放入一個結構體(將函數指向結構實例的上下文指針)來實現ADT,以便您使用方法來模擬對象,那麼我會看到沒有理由稱他們爲「功能實施的方法」。
我一直使用「方法」作爲「成員函數」的同義詞,這意味着C++,因爲C沒有這種東西。
在硬幣的另一面然而,人們可能認爲的foo_alter_state
中的作用:
struct foo {
// implementation stuff;
};
void foo_alter_state(struct foo *self);
爲仍然是一個方法操作上foo
S,儘管自立。它基本上是C語言的OOP,但是手工實現。
如果struct foo;
只在頭文件中聲明,但未在任何地方公開定義,則此透視可能尤其如此。
同意,這就是爲什麼我認爲對這個區別過分認真並不是很有用。 – 2012-01-30 20:12:26
- 1. 函數或方法或函數成員或方法成員?
- 2. 用於方法或函數
- 3. 如何從Python函數或方法中獲取函數或方法的名稱?
- 4. 方括號內的Node.js函數語法[函數]或[函數:isBuffer]
- 5. python中的全局方法或函數
- 6. 在函數或方法中使用
- 7. 創造一個函數或方法
- 8. 調用函數或返回主方法
- 9. Rails函數或方法像PHP日期()
- 10. 聲明constexpr函數或方法
- 11. 從函數或方法加載的Dropdownlist
- 12. jQuery委託或函數方法?
- 13. 未定義的函數或方法「榮」
- 14. 單方法類 - 通過依賴構造函數或方法
- 15. C# - 將字符串(包含方法或函數)轉換爲C#中的實際函數或方法#
- 16. 如何以編程方式在函數或方法中定義全局函數?
- 17. 映射函數給出無法解析的函數或方法(映射)
- 18. 罰函數方法
- 19. 函數select()方法
- 20. Java:一個構造函數或方法將接受數組或列表或...?
- 21. 參數數量未知的函數或方法
- 22. 構造函數參數或方法參數?
- 23. WebStorm 2016.3 +電子:無法解析函數或方法
- 24. 內置函數/方法vs自己的函數/方法?
- 25. 函數內函數最佳方法?
- 26. JavaScript構造函數函數方法
- 27. PHP靜態方法或函數的對象數組?
- 28. 在Dapper中排除空值參數的函數或方法
- 29. 具有方法參數值或使用委託的c#函數
- 30. 使用負數與rand()函數?或替代方法
雖然我已經看到使用方法/功能的人和將C視爲「窮人的Java」的人之間存在相當強的相關性,所以它可以提出一個有趣的討論點。 – Flexo 2012-01-30 20:15:26