2012-01-30 13 views
4

抽象データ型をC言語で記述する場合、これらのデータ型に対してアクションを実行するための関数は、関数,などのインターフェイスで公開されていますか?私はどこでも建設的な答えを見つけることができないようです。 メソッドはC++固有の用語ですか?関数またはメソッド?

答えて

6

メソッドはC++固有の用語ですか?

"メソッド"はオブジェクト指向プログラミング用語であり、オブジェクトの名前空間の一部である関数を参照します。したがって、C++、Java、Objective-Cなどの言語でオブジェクトのメソッドを作成することができます。一方、Cでは、メソッドではなく、スタンドアロンの関数があります。

クラスメソッドの「公式」C++用語は「メンバ関数」であり、仕様の9.3節で説明されています。

2

メソッドは、通常、OOPのクラスの一部である「関数」を記述するために使用されます。関数はまさにそれです - 関数、クラスの一部ではありません。

.hファイルでは、 "関数宣言"と呼ばれ、.cでは "関数実装"と呼ばれています...私は専門家ではなく、ちょうど.02です。

3

メソッドは、クラスに関連付けられた関数です。

クラスはCに存在しないため、すべて技術的に機能します。

1

私はこれを作るために特に便利な区別はないと思いますが、一般的に、あなたはCが提供していないことをOOPのものの全体の束を意味単語方法ので機能それらを呼び出すと思います。 the following様:

方法は、実行時に、それらが関連付けられているクラス(またはクラスインスタンスまたはクラス オブジェクトまたはオブジェクト)のインスタンスに格納されている データへのアクセスを有し、それによって可能である特別な特性を有します には、インスタンスの状態を制御します。

しかし、私は日常のJavaで育った人々がような方法 C 関数を参照して、私は一度、彼らが何を意味するのかについて混乱していたことがありません聞きました。少しでも。

あなたは、しかし、以下の(緩い)の区別をしたいかもしれません:

  • 手順機能が手順です何か

  • を行うコードのブロックです1つまたは複数の入力を出力に関連付けるもの

  • メソッドは、そのクラスのあるクラスまたはインスタンスに属するプロシージャです。

+0

メソッド/関数を交換する人とCを「貧しい人のJava」と見なす人の間には強い相関関係があることが分かりましたが、興味深い議論のポイントを作ることができます。 – Flexo

1

厳密に言えば、関数は与えられた入力に対して出力を与える演算です。一方、メソッドは型にバインドされた関数です。 Cは機能を持っているだけで、私はあなたとは違うとは思わない。

しかし、ADTを実装する場合、たとえば、関数ポインタを構造体に配置すると(関数へのコンテキストポインタをstructインスタンスに渡す)、メソッドでオブジェクトを模倣しているように見えますそれらを「関数として実装されたメソッド」と呼ぶ理由はありません。

4

私はいつも "メソッド"を "メンバー関数"の同義語として使用しています。これはC++にはそのようなことがないので、C++を意味します。コインの反対側に

しかし、1は内foo_alter_stateの役割と主張するかもしれません:自立いえ

struct foo { 
    // implementation stuff; 
}; 

void foo_alter_state(struct foo *self); 

は、まだfooの上で動作方法でした。基本的にはCのOOPですが、手作業で実装されています。

このパースペクティブは、struct foo;がヘッダーでのみ宣言されていて、どこにでも公的に定義されていない場合に特に当てはまる可能性があります。

+0

合意しました。それで、私は、この区別についてあまり真剣に考えるのはあまり有用ではないと言います。 –

関連する問題