Cosa fa & # 8220; Sovraccarico & # 8221; / & # 8220; Sovraccarico & # 8221; / & # 8220; Sovraccarico & # 8221; Significare?

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

  •  08-07-2019
  •  | 
  •  

Domanda

Cosa significa "Sovraccarico" / "Sovraccarico" cattivo riguardo alla programmazione?

È stato utile?

Soluzione

Significa che stai fornendo una funzione (metodo o operatore) con lo stesso nome, ma con una firma diversa. Ad esempio:

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

Altri suggerimenti

Concetto di base

Sovraccarico o "sovraccarico del metodo" è il nome del concetto di avere più di un metodo con lo stesso nome ma con parametri diversi.

Ad es. La classe System.DateTime in c # ha più di un metodo ToString. ToString standard utilizza la cultura predefinita del sistema per convertire il datetime in stringa:

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

mentre un altro sovraccarico dello stesso metodo consente all'utente di personalizzare il formato:

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

A volte il nome del parametro può essere lo stesso ma i tipi di parametro possono differire:

Convert.ToInt32(123m);

converte un decimale in int mentre

Convert.ToInt32("123");

converte una stringa in int.

Risoluzione di sovraccarico

Per trovare il sovraccarico migliore da chiamare, il compilatore esegue un'operazione denominata "risoluzione di sovraccarico". Per il primo esempio, il compilatore può trovare il metodo migliore semplicemente abbinando il conteggio degli argomenti. Per il secondo esempio, il compilatore chiama automaticamente la versione decimale del metodo di sostituzione se si passa un parametro decimale e chiama la versione di stringa se si passa un parametro di stringa. Dall'elenco dei possibili output, se il compilatore non riesce a trovarne uno adatto da chiamare, verrà visualizzato un errore del compilatore come " Il miglior sovraccarico non corrisponde ai parametri ... " ;.

Puoi trovare lotti di informazioni su come i diversi compilatori eseguono la risoluzione di sovraccarico.

Una funzione è sovraccarica quando ha più di una firma. Ciò significa che puoi chiamarlo con diversi tipi di argomenti. Ad esempio, potresti avere una funzione per stampare una variabile sullo schermo e puoi definirla per diversi tipi di argomenti:

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

In questo caso, la funzione print () avrebbe tre sovraccarichi.

Significa avere versioni diverse della stessa funzione che accettano diversi tipi di parametri. Tale funzione è "sovraccaricata". Ad esempio, prendi la seguente funzione:

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

È possibile utilizzare questa funzione per stampare una stringa sullo schermo. Tuttavia, questa funzione non può essere utilizzata quando si desidera stampare un numero intero, quindi è possibile creare una seconda versione della funzione, in questo modo:

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

Ora la funzione è sovraccarica e quale versione della funzione verrà chiamata dipende dai parametri che le dai.

Altri hanno risposto che cos'è un sovraccarico. All'inizio viene confuso con l'override / override.

A differenza del sovraccarico, l'override sta definendo un metodo con la stessa firma nella sottoclasse (o classe figlio), che sovrascrive l'implementazione delle classi padre. Alcune lingue richiedono una direttiva esplicita, come la funzione membro virtual in C ++ o override in Delphi e 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.");
    }
}

Un metodo sovraccarico è uno con diverse opzioni per il numero e il tipo di parametri. Ad esempio:

foo(foo)

foo(foo, bar)

entrambi farebbero relativamente la stessa cosa ma uno ha un secondo parametro per più opzioni

Inoltre puoi avere lo stesso metodo per prendere tipi diversi

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

Proprio come nell'uso comune, si riferisce a qualcosa (in questo caso, un nome di metodo), che fa più di un lavoro.

Sovraccarico è la versione del povero multimetodi da CLOS e altre lingue . È quello confuso.

Sostituzione è il solito OO. Va con l'eredità, lo chiamiamo anche ridefinizione (ad es. In https: / La risposta di /stackoverflow.com/users/3827/eed3si9n Line fornisce una definizione specializzata di Draw () .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top