2012-01-30 60 views
4

如果我在C語言中編寫抽象數據類型,那麼寫入的函數是爲了對這些數據類型執行操作而暴露在接口(.h文件)中,這些函數被稱爲函數,方法,還是完全不同的東西?我似乎無法在任何地方找到有建設性的答案。是方法一個C++的特定術語?函數或方法?

回答

6

方法是C++特有的術語嗎?

「方法」是面向對象的程序設計術語,指的是作爲對象命名空間一部分的函數。因此,您可以使用C++,Java,Objective-C等語言爲對象創建方法。另一方面,您仍然擁有獨立的函數,而不是方法。

請記住,類方法的「官方」C++術語是「成員函數」,並在規範的第9.3節中進行了描述。

2

方法通常用於描述作爲OOP中類的一部分的「函數」。函數就是這樣 - 函數,而不是類的一部分。

在.h文件中,我將它們稱爲「函數聲明」,在.c中,我將它們稱爲「函數實現」......我不是專家,只是我的.02。

3

方法是與類相關的函數。由於C中不存在類,所以在技術上一切都是函數。

1

我不認爲這是一個特別有用的區別之作,但在一般情況下,你會打電話給他們功能因爲這個詞方法意味着一大堆的面向對象的東西,C不提供。像the following

方法已在運行時,他們可以訪問存儲在類(或類實例或類 對象或對象)的實例 數據他們正在與相關聯,並因此能夠在特殊屬性到 控制實例的狀態。

誰Java的長大,但我經常聽到人們引用C 功能方法,我從來沒有一次被混淆關於他們的意思。一點兒都沒有。

你可能會,但是,要進行以下(寬鬆)的區別:

  • 一個過程是一個代碼塊做一些事情

  • 一個功能是一個過程將一個或多個輸入與輸出相關聯

  • A 方法是屬於某個類或該類的一個實例的過程

+0

雖然我已經看到使用方法/功能的人和將C視爲「窮人的Java」的人之間存在相當強的相關性,所以它可以提出一個有趣的討論點。 – Flexo 2012-01-30 20:15:26

1

嚴格地說,函數是一種爲給定輸入提供輸出的操作。而方法是綁定到類型的函數。 C只有功能,我認爲你沒有什麼不同。

但是,如果您正在通過將函數指針放入一個結構體(將函數指向結構實例的上下文指針)來實現ADT,以便您使用方法來模擬對象,那麼我會看到沒有理由稱他們爲「功能實施的方法」。

4

我一直使用「方法」作爲「成員函數」的同義詞,這意味着C++,因爲C沒有這種東西。

在硬幣的另一面然而,人們可能認爲的foo_alter_state中的作用:

struct foo { 
    // implementation stuff; 
}; 

void foo_alter_state(struct foo *self); 

仍然是一個方法操作上foo S,儘管自立。它基本上是C語言的OOP,但是手工實現。

如果struct foo;只在頭文件中聲明,但未在任何地方公開定義,則此透視可能尤其如此。

+0

同意,這就是爲什麼我認爲對這個區別過分認真並不是很有用。 – 2012-01-30 20:12:26