「オーバーロード」/「オーバーロード」/「オーバーロード」とはどういう意味ですか?

StackOverflow https://stackoverflow.com/questions/289997

  •  08-07-2019
  •  | 
  •  

質問

" Overloaded" /" Overload"の機能プログラミングに関してはどういう意味ですか?

役に立ちましたか?

解決

これは、同じ名前で異なるシグネチャを持つ関数(メソッドまたは演算子)を提供していることを意味します。 例:

void doSomething();
int doSomething(string x);
int doSomething(int a, int b, int c);

他のヒント

基本概念

オーバーロード、または「メソッドのオーバーロード」は、同じ名前で異なるパラメーターを持つ複数のメソッドを持つという概念の名前です。

たとえばc#のSystem.DateTimeクラスには、複数のToStringメソッドがあります。標準のToStringは、システムのデフォルトカルチャを使用して日時を文字列に変換します。

new DateTime(2008, 11, 14).ToString(); // returns "14/11/2008" in America

同じメソッドの別のオーバーロードにより、ユーザーは形式をカスタマイズできます:

new DateTime(2008, 11, 14).ToString("dd MMM yyyy"); // returns "11 Nov 2008"

パラメーター名は同じ場合もありますが、パラメーターのタイプは異なる場合があります:

Convert.ToInt32(123m);

10進数をintに変換します

Convert.ToInt32("123");

文字列をintに変換します。

オーバーロードの解決

呼び出すのに最適なオーバーロードを見つけるために、コンパイラは「オーバーロード解決」という名前の操作を実行します。最初の例では、コンパイラーは引数の数を照合するだけで最適な方法を見つけることができます。 2番目の例では、decimalパラメーターを渡すとコンパイラーは自動的にreplaceメソッドの10進数バージョンを呼び出し、stringパラメーターを渡すと文字列バージョンを呼び出します。可能な出力のリストから、呼び出すのに適したものをコンパイラーが見つけられない場合、「最高のオーバーロードがパラメーターと一致しません...」のようなコンパイラー・エラーが表示されます。

検索さまざまなコンパイラがオーバーロード解決を実行する方法についての情報。

関数は、複数の署名がある場合にオーバーロードされます。これは、異なる引数タイプで呼び出すことができることを意味します。たとえば、画面に変数を出力するための関数があり、さまざまな引数タイプに対して定義できます。

void print(int i);
void print(char i);
void print(UserDefinedType t);

この場合、print()関数には3つのオーバーロードがあります。

これは、異なるタイプのパラメーターを取る同じ関数の異なるバージョンを持つことを意味します。このような関数は「オーバーロード」されています。たとえば、次の関数を使用します。

void Print(std::string str) {
  std::cout << str << endl;
}

この関数を使用して、文字列を画面に印刷できます。ただし、整数を出力する場合、この関数は使用できません。次のように、関数の2番目のバージョンを作成できます。

void Print(int i) {
  std::cout << i << endl;
}

関数はオーバーロードされ、呼び出される関数のバージョンは、指定したパラメーターによって異なります。

他の人は、過負荷とは何かを答えています。開始するとき、オーバーライド/オーバーライドと混同されます。

オーバーロードとは対照的に、オーバーライドはサブクラス(または子クラス)で同じシグネチャを持つメソッドを定義することで、親クラスの実装をオーバーライドします。 C ++の virtual メンバー関数、DelphiおよびC#の override など、一部の言語では明示的なディレクティブが必要です。

using System;

public class DrawingObject
{
    public virtual void Draw()
    {
        Console.WriteLine("I'm just a generic drawing object.");
    }
}

public class Line : DrawingObject
{
    public override void Draw()
    {
        Console.WriteLine("I'm a Line.");
    }
}

オーバーロードされたメソッドは、パラメーターの数とタイプに関するいくつかのオプションを持つメソッドです。例えば:

foo(foo)

foo(foo, bar)

どちらも比較的同じことを行いますが、1つはより多くのオプションのための2番目のパラメーターを持っています

また、同じメソッドで異なるタイプを取ることもできます

int Convert(int i)
int Convert(double i)
int Convert(float i)

一般的な使用法と同様に、それは何か(この場合はメソッド名)を参照し、複数のジョブを実行します。

オーバーロードは、 CLOSおよび他の言語のマルチメソッド。紛らわしいものです。

オーバーライドは、通常のオブジェクト指向です。継承も伴い、再定義とも呼ばれます(例: https:/ /stackoverflow.com/users/3827/eed3si9n's answer Line は、 Draw()の特別な定義を提供します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top