1つのメソッドが他のメソッドをオーバーロードするか、両方のメソッドが「オーバーロードされる」か


13

このメソッドを作成する場合

public void foo()

そして、私はこのようなオーバーロードされたバージョンを作成します

public void foo( string bar )

2番目の関数が最初の関数をオーバーロードすると言いますか、それとも両方のメソッドが等しく「オーバーロード」されるのでしょうか?

これは、別の関数によってオーバーロードされている基本型関数があることを意味します(継承に似ていますが、実際にはそうではありません)。

あるメソッドが「別のメソッドをオーバーロードする」ことができると仮定すると、「オーバーローダー」や「オーバーロード」などの用語が含まれている場合、それがまったく単語である場合も意味します。しかし、特にいくつかのオーバーロードが発生する可能性があるため、それはまったく正しくありません。

オーバーロードされたメソッドを作成するプロセスを書き留めたいと思ったときに、この質問に答えました。

例:

  • 私は過負荷です foo
  • 私はオーバーロードをしていfoofoo( string bar )
  • オーバーロードされたメソッドを作成しています
  • fooをオーバーロードしています

ええ、この種のことで考えさせられました。どうしたらいいのかわかりません。オンラインでの関数のオーバーロードの説明は数千ではないにしても数百ありますが、一見するとこれに対処するものが見つかりませんでした。


オーバーロードという言葉がこれに使用された理由を知りたいです。意味をなさないようです。何がロードされていますか?どのように再ロードされるか、過度にロードされるのか
マーティンマート

@MartinMaatチトンによる受け入れられた答えと、それについてのkindallのコメントを読みましたか?彼らは何が(過)負荷されているかを説明する良い仕事をしているようです。
8ビットツリー

私はそれらを読みましたが、それらは概念ではなく、説明を説明しています。
マーティンマート

回答:


29

オーバーロードについて話すとき、関数自体ではなく、関数の名前がオーバーロードされます。名前をオーバーロードする関数は「オーバーロード」であり、名前をオーバーロードしますが、相互にはオーバーロードしません。あなたの例では"public void foo()""public void foo( string bar )"両方とも名前「foo」をオーバーロードします。したがって、関数の1つのオーバーローダーとオーバーロードの観点から話すことはできません。それらは直接的な関係がないためです。

例では、「foo」(名前)を「foo(string bar)」(関数)でオーバーロードしていると言うことができますが、メソッドがオーバーロードされないため、オーバーロードメソッドを作成したとは言えません。オーバーロードメソッドを作成すると言うことができます。「fooを過負荷にする」という定式化は、「fooを過負荷にする」というより悪い方法です。


しかし、他の関数が同じものを持っていなくても、すべての関数がその名前をオーバーロードするわけではありませんか?
左辺約

上記の一般的な質問に対する答えとしてこれに同意します。しかし、一方が他方から関数の1つを呼び出した場合、一方が他方をオーバーロードしているという感覚を感じます。
ジョシュアドレーク

3
@leftaroundabout:「オーバーロード」は、通常よりも多くの「ロード」を実行していることを意味するため、この用語は、同じ名前の関数が複数ある場合にのみ使用されます。
親切な

@kindallに同意しました。ソフトウェア開発コンテキストでの「オーバーロード」という言葉は、「複数の意味を割り当てる」ことを意味します。、(意味が他のパラメータに依存する)のパラメータをオーバーロード、DB(意味が他のフィールドに依存)で列をオーバーロードすることなど一つの方法は、他に過負荷をかけませんが、1と、複数の方法があれば名前が、名前は"過負荷」。
KutuluMike

15

私は単にfoo過負荷だと言うでしょう。ここでは、マスター/スレーブまたは親/子の関係は確かにありません。


2
同意- メソッド自体ではなく、オーバーロードされているのはメソッドまたは演算子の名前です。オーバーライドと混同しないでください。サブクラスの特定のメソッドの実装は、親クラスの実装に取って代わります。
カレブ

1
私もこれに同意しますが、チトンはそれを説明するのにより良い仕事をしていると思います。ご回答ありがとうございます!
ウィレムD'Haeseleer

3

これを表現する良い方法は、時間の経過とともにクラスに加えられた変更ではなく、最終結果に焦点を当てることだと思います。したがって、「「foo(other parameters)」で「foo」をオーバーロードしました」と言う代わりに、「fooは「foo()」および「foo(other parameters)」でオーバーロードされた関数です」と言います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.