Frage

Was bedeutet "überladen"/"Überlast" in Bezug auf die Programmierung?

War es hilfreich?

Lösung

Dies bedeutet, dass Sie eine Funktion (Methode oder Operator) mit demselben Namen bereitstellen, jedoch mit einer anderen Signatur. Zum Beispiel:

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

Andere Tipps

Basiskonzept

Überladen oder "Methodenüberladung" ist der Name des Konzepts, mehr als eine Methode mit demselben Namen, jedoch mit unterschiedlichen Parametern zu haben.

Für EG System.DateTime -Klasse in C# haben mehr als eine ToString -Methode. Der Standard -ToString verwendet die Standardkultur des Systems, um die DateTime in String umzuwandeln:

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

Während eine weitere Überladung derselben Methode dem Benutzer das Format anpassen kann:

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

Manchmal kann der Parametername gleich sein, aber die Parametertypen können sich unterscheiden:

Convert.ToInt32(123m);

konvertiert eine Dezimalzahl in INT, während

Convert.ToInt32("123");

Konvertiert eine Zeichenfolge in int.

Überlastungsauflösung

Um die beste Überlastung zu finden, die aufgerufen werden soll, führt Compiler eine Operation mit dem Namen "Überlastauflösung" durch. Für das erste Beispiel kann Compiler die beste Methode finden, indem er die Argumentenzahl entspricht. Für das zweite Beispiel ruft Compiler die Dezimalversion der Ersatzmethode automatisch auf, wenn Sie einen Dezimalparameter übergeben, und die String -Version aufruft, wenn Sie einen String -Parameter übergeben. Wenn der Compiler aus der Liste der möglichen Ausgänge keinen geeigneten Anruf finden kann, erhalten Sie einen Compiler -Fehler wie "Die beste Überladung stimmt nicht mit den Parametern überein ...".

Du kannst finden Viele Informationen darüber, wie unterschiedliche Compiler eine Überlastauflösung durchführen.

Eine Funktion wird überladen, wenn sie mehr als eine Signatur hat. Dies bedeutet, dass Sie es mit unterschiedlichen Argumententypen aufrufen können. Beispielsweise haben Sie möglicherweise eine Funktion zum Drucken einer Variablen auf dem Bildschirm und können sie für verschiedene Argumententypen definieren:

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

In diesem Fall hätte die Funktion print () drei Überladungen.

Dies bedeutet, unterschiedliche Versionen derselben Funktion zu haben, die unterschiedliche Parameterarten annehmen. Eine solche Funktion ist "überladen". Nehmen Sie beispielsweise die folgende Funktion:

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

Sie können diese Funktion verwenden, um eine Zeichenfolge auf den Bildschirm zu drucken. Diese Funktion kann jedoch nicht verwendet werden, wenn Sie eine Ganzzahl drucken möchten. Sie können dann eine zweite Version der Funktion wie folgt erstellen:

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

Jetzt wird die Funktion überlastet und welche Version der Funktion aufgerufen wird, hängt von den von Ihnen angegebenen Parametern ab.

Andere haben beantwortet, was eine Überlastung ist. Wenn Sie anfangen, wird es mit Override/Overried verwechselt.

Im Gegensatz zur Überlastung definiert das Überschreiben eine Methode mit derselben Signatur in der Unterklasse (oder untergeordnete Klasse), die die Implementierung der übergeordneten Klassen überschreibt. Einige Sprache erfordern eine explizite Richtlinie, wie z. virtual Mitgliedsfunktion in C ++ oder override in Delphi und C#.

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.");
    }
}

Eine überladene Methode ist eine mit mehreren Optionen für die Anzahl und Art der Parameter. Zum Beispiel:

foo(foo)

foo(foo, bar)

Beide würden relativ dasselbe tun, aber man hat einen zweiten Parameter für weitere Optionen

Sie können auch die gleiche Methode haben, die unterschiedliche Typen aufnehmen

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

Genau wie bei allgemeinem Gebrauch bezieht es sich auf etwas (in diesem Fall ein Methodenname), der mehr als einen Job macht.

Überlastung ist die Version des armen Mannes von Multimethods aus Clos und anderen Sprachen. Es ist das verwirrende.

Überschreiben ist der übliche oo. Es geht mit Vererbung, wir nennen es auch eine Neudefinition (zB in https://stackoverflow.com/users/3827/eed3si9ns Antwort Line Bietet eine spezielle Definition von Draw().

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top