Question

Qu'est-ce que "surchargé" / "surchargé"? signifie en ce qui concerne la programmation?

Était-ce utile?

La solution

Cela signifie que vous fournissez une fonction (méthode ou opérateur) portant le même nom mais avec une signature différente. Par exemple:

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

Autres conseils

Concept de base

Surcharge, ou "surcharge de méthode" " est le nom du concept d'avoir plus d'une méthode avec le même nom mais avec des paramètres différents.

Par exemple La classe System.DateTime en c # possède plusieurs méthodes ToString. ToString standard utilise la culture par défaut du système pour convertir la date / heure en chaîne:

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

alors qu'une autre surcharge de la même méthode permet à l'utilisateur de personnaliser le format:

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

Parfois, le nom du paramètre peut être identique mais les types de paramètre peuvent différer:

Convert.ToInt32(123m);

convertit un nombre décimal en int tant que

Convert.ToInt32("123");

convertit une chaîne en int.

Résolution de surcharge

Pour trouver la meilleure surcharge à appeler, le compilateur effectue une opération intitulée "Résolution de la surcharge". Pour le premier exemple, le compilateur peut trouver la meilleure méthode en faisant simplement correspondre le nombre d'arguments. Pour le deuxième exemple, le compilateur appelle automatiquement la version décimale de la méthode replace si vous transmettez un paramètre décimal et la version chaîne si vous transmettez un paramètre chaîne. Dans la liste des sorties possibles, si le compilateur ne trouve pas le bon candidat à appeler, vous obtiendrez une erreur du compilateur du type "La meilleure surcharge ne correspond pas aux paramètres ...".

Vous pouvez trouver beaucoup d'informations sur la manière dont les différents compilateurs effectuent la résolution de surcharge.

Une fonction est surchargée lorsqu'elle comporte plusieurs signatures. Cela signifie que vous pouvez l'appeler avec différents types d'arguments. Par exemple, vous pouvez avoir une fonction d’impression d’une variable à l’écran et la définir pour différents types d’arguments:

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

Dans ce cas, la fonction print () aurait trois surcharges.

Cela signifie avoir différentes versions d'une même fonction qui prennent différents types de paramètres. Une telle fonction est "surchargée". Par exemple, prenons la fonction suivante:

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

Vous pouvez utiliser cette fonction pour imprimer une chaîne à l'écran. Cependant, cette fonction ne peut pas être utilisée lorsque vous souhaitez imprimer un entier, vous pouvez ensuite en créer une seconde version, comme ceci:

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

La fonction est maintenant surchargée et la version de la fonction appelée dépend des paramètres que vous lui attribuez.

D'autres ont répondu à ce qu'est une surcharge. Lorsque vous débutez, il est confus de remplacer / remplacer.

Contrairement à la surcharge, le remplacement consiste à définir une méthode avec la même signature dans la sous-classe (ou classe enfant), qui redéfinit l'implémentation des classes parentes. Certaines langues nécessitent des directives explicites, telles que la fonction membre virtual en C ++ ou override en Delphi et 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.");
    }
}

Une méthode surchargée est une méthode avec plusieurs options pour le nombre et le type de paramètres. Par exemple:

foo(foo)

foo(foo, bar)

les deux feraient relativement la même chose mais on aurait un second paramètre pour plus d'options

Vous pouvez aussi avoir la même méthode prendre différents types

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

Comme dans l’usage courant, cela fait référence à quelque chose (dans ce cas, un nom de méthode), faisant plus d’un travail.

La surcharge est la version du pauvre homme des méthodes multimédias du CLOS et d'autres langues . C'est la confusion.

La substitution est la méthode OO habituelle. Cela va de pair avec l'héritage, nous l'appelons aussi la redéfinition (par exemple, dans https: / La réponse de /stackoverflow.com/users/3827/eed3si9n La Ligne fournit une définition spécialisée de Draw () .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top