- ベストアンサー
関数とメソッドの違い
初歩的な質問なのですが、 関数とメソッドの違いが分からず悩んでいます。 書籍や人によって、 関数とメソッドは同じ物として書いている物もあれば、 メソッドはクラスに関連付いた関数としていたり、 クラスでもpublic関数だけとか、 引数のある物がメソッド、 逆に無い物がメソッド等々…で、 どれが正しいのか良く分からないのです。 関数とメソッドの違いを教えていただけますよう、 お願いいたします。
- みんなの回答 (14)
- 専門家の回答
質問者が選んだベストアンサー
正解だけ先に言っておきましょう。オブジェクト指向での定義は 「メソッドとは、オブジェクトに送られてきたメッセージを処理するモノ」 「関数とは、メソッドの実装」 ついでに、 「メッセージとは、オブジェクトに何かしらお願いするために送られるモノ」 です。メッセージとメソッドと関数は明確に違うのですよ。 上記の通りなんですが、質問の文について、なにが正しいか、という解答は「文脈による」としか言いよ うが無いんです。 解説書の一部分だけ抜き出して考えるのは非常に危険な行為です。 文脈を色々変えてみます。例えばオブジェクト指向の話をしているとしたら、 >1. 関数とメソッドは同じ物として書いている物もあれば、 バツ。意味的に全く異なります。 '\0'と""とNULLと0くらい違います。等価なんていってしまったら石が飛びます。(私が投げます:-p) > 2.メソッドはクラスに関連付いた関数としていたり、 サンカク。C++での実装はそうでしょうが、オブジェクト指向を考える上で、その考え方は危険です。 > 3.クラスでもpublic関数だけとか、 > 引数のある物がメソッド、 > 逆に無い物がメソッド等々…で、 バツ。引数の数でメソッドで無くなる?そんなバカな! 例えprivateでもメソッドですよ。 オブジェクト指向言語C++のことを考えよう!という文脈ならば、 1.サンカク。実装は確かにそうなってます。ですが、上記の通り意味的に違うんです。 2.○。C++において、メソッドは「クラスに関連ついた関数」として実装されてます。 3.そんなわけないでしょう。 オブジェクト指向?なにそれ?構造体に関数がくっついただけでしょ?と乱暴極まりない文脈なら、 1.○。当然! 2.なにいってるの? 3.サブルーチンとファンクションの違いだ! と、文脈で全然変わるんですよ。これに関しては、本一冊だけだとなかなか気付きにくいです。 是非とも多数の本を読み比べることをお勧めします。
その他の回答 (13)
- JeanneNet
- ベストアンサー率48% (100/208)
- jacta
- ベストアンサー率26% (845/3158)
まず、ここが一番大事なのですが、CやC++には「メソッド」というものはありません。C++にあるのは「メンバ関数」であってメソッドではありません。 これに対して、C#やObjective-Cには「メソッド」が存在します。 C/C++において「メソッド」といっているのは、他の言語からの類推または混同によるもので、関数のことを「サブルーチン」というのと大差ありません。
お礼
ご返答ありがとうございます。 私としてはクラスのメンバ関数がメソッドの事で、 メンバ関数と言う言い回しは、C/C++の方言だと考えていたのですが、 改めて調べ直すと、他の方々のご返答のように、 人によってまちまちなので、何が正しいのか確信がもてなくなりました。 多くの方々から、ご返答を頂けましてありがたいのですが、 結局のところ、どなたのご意見が正しいのでしょうか。
- sha-girl
- ベストアンサー率52% (430/816)
普通メソッドとは クラスのメンバ関数の事を指します。 class A{ void Fnc(); //class Aのメソッド あるいはメンバ関数 }; // ただの関数 少なくともこれをメソッドとは言わない void Fnd(){ }
お礼
ご返答ありがとうございます。 私としてはクラスのメンバ関数がメソッドの事で、 メンバ関数と言う言い回しは、C/C++の方言だと考えていたのですが、 改めて調べ直すと、他の方々のご返答のように、 人によってまちまちなので、何が正しいのか確信がもてなくなりました。 多くの方々から、ご返答を頂けましてありがたいのですが、 結局のところ、どなたのご意見が正しいのでしょうか。
- 1
- 2
お礼
ご返答ありがとうございます。 うーん、文脈で意味する所が変わってしまうのか… 単純な事かと思っていましたが、 意外と複雑な事だったようで。 皆様方のご意見とても為になりました。