bonjour à toutes et à tous,
J'ai une petite question et je n'arrive vraiment pas à connaître sa réponse![]()
Pouvez-vous m'expliquer ce qu'est l'overlod et l'overrid ???
Je vous remerci beaucoup ?![]()
bonjour à toutes et à tous,
J'ai une petite question et je n'arrive vraiment pas à connaître sa réponse![]()
Pouvez-vous m'expliquer ce qu'est l'overlod et l'overrid ???
Je vous remerci beaucoup ?![]()
L'overload est la surcharge, qui permet d'écrire plusieurs fonctions ayant le même nom, mais acceptant des types de paramètres différents.
Un exemple est la fonction IIF
L'override est la ré-implémentation. Elle va de paire avec virtual ou dynamic.
sjrd, ancien rédacteur/modérateur Delphi.
Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
Découvrez Mes tutoriels.
overload permet d'ajouter de la confusion dans un programme
c'est à dire qu'avec overload, le seul nom d'une fonction ne permettra plus de l'identifier, il faut en plus regarder la nature de ses paramètres. ça peut être séduisant, mais personnellement je n'aime pas du tout
Delphi déterminera quelle fonction ToStr() il faut utiliser en fonction du type du paramètre qu'on lui soumet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // sans overload function IntToStr(i:integer):string; function FloatToStr(f:single):string; // avec overload function ToStr(i:integer):string; overload; function ToStr(f:single):string; overload;
Override c'est tout autre chose, c'est dans le contexte des classes, une classe qui dérive d'une autre, peut surcharger une méthode de la classe parente, c'est à dire redéfinir son comportement.
dans l'exemple ci-dessus, TCarre et TCercle sont des formes (TForme), toutes les formes ont une surface, on déclare donc une fonction Surface au niveau de l'ancêtre TForme, mais comme le calcule de celle-ci dépend de chaque forme particulière, la méthode sera virtuelle, et même abstraite dans la mesure ou on ne peut pas définir une valeur par défaut valide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 type TForme=class function Surface:single; virtual; abstract; end; TCarre=class(TForme) function Surface:single; override; end; TCercle=class(TForme) function Surface:single; override; end;
et donc TCarre et TCercle surcharge la fonction Surface pour donner leur version du calcul.
Je vous remercie beaucoup,![]()
je comprend mieux maintenant avec vos explications qui sont très clair.
Merci beaucoup![]()
![]()
![]()
![]()
Question de point de vueEnvoyé par Paul TOTH
Certes, je reste très prudent lorsque j'utilise des overload, mais je peux les utiliser lorsque :
Toutes les méthodes surchargées ont exactement la même fonctionnalité, et que leur seule différence réside dans les paramètres transmis. Souvent, il s'agit alors de paramètres par défaut, ou lorsque plusieurs types de données permettent d'identifier un même élément (par exemple, un ID d'objet ou l'objet lui-même).
Dans ces cas-là, il n'y a pas de confusion, et c'est même plus facile à lire.
Mais bon, je crois que je sors un peu du cadre du forum Débutant![]()
sjrd, ancien rédacteur/modérateur Delphi.
Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
Découvrez Mes tutoriels.
pas forcément, un débutant à le droit de se forger une idée sur le langageEnvoyé par sjrd
en fait je trouve un intéret dans overload et les paramètres par défaut (qui ne sont pas la même chose), quand il est question de garder une compatibilité avec un code précédent.
inventons un exemple...
un autre exemple que j'aime bien, c'est l'API OpenGL, pas mal de fonctions sont déclinées en fonction des paramètres...mais ils ont simplement ajouté un suffixe qui précise ce qu'on fait, je trouve ça très bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 // j'ai un objet qui a une méthode Connect() procedure TMonObjet.Connect(const Host:string); // mince, j'aimerai bien pouvoir ajouter un numéro de port, // mais ça va mettre le bazar dans les autres projets // pas grave, je vais mettre une valeur par défaut procedure TMonObjet.Connect(const Host:string; port:integer=1234); // tient c'est dommage, des fois, j'ai déjà l'adresse IP, il est dommage // de forcer une nouvelle résolution d'adresse procedure TMonObjet.Connect(const Host:string; port:integer=1234); overload; procedure TMonObjet.Connect(Addr:integer; port:integer=1234); overload; // encore que personnellement je préfère procedure TMonObjet.Connect(const Host:string; port:integer=1234); procedure TMonObjet.ConnectByAddr(Addr:integer; port:integer=1234);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // définir un point x,y procedure glVertex2i(x,y:integer); // idem (f=float, soit un single en Pascal) procedure glVertex2f(x,y:single); // définir un point x,y,z procedure glVertex3i(x,y,z:integer); procedure glvertex3f(x,y,z:single);
Partager