Surcharger une fonction (sans changer la signature)

Signaler
Messages postés
165
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
24 octobre 2007
-
Messages postés
165
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
24 octobre 2007
-
Bonjour, voilà j'aimerais simplement avoir une fonction "int fonction();" et une autre "char fonction();". Comme la signature est la même, je ne peux pas faire ca simplement :_
Y'aurait il une astuce ? les template peut etre ... ?
merci

11 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
En C++, c'est fesable avec les classes mais en C, non.

C++ (@++)<!--
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Tu peux toujours remplacer ta fonction par une procédure:
fonction (int&) et fonction( char&)
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Au pire, leur donner des noms différents

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
165
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
24 octobre 2007

SAKingdom tu dis que c'est possible en C++ grace aux classes, je peux savoir comment ?
vecchio => enfaite si je veux surcharger la fonction, c'est justement pour qu'elles aient le meme nom ^^

je vous explique plus en détail ce que je fais (jsais pas si c'est utile m'enfin ...) :
je suis à l'intérieur d'une classe appelée LogFile et je souhaite surcharger la fonction GetTabEn(); , comme ceci :
ENREGISTREMENT * GetTabEn(void);
std::deque<ENREGISTREMENT> GetTabEn(void);

ENREGISTREMENT étant une structure perso.

j'obtiens l'erreur là :
std::deque<ENREGISTREMENT, std::allocator<ENREGISTREMENT> > LogFile::GetTabEn()' and `ENREGISTREMENT* LogFile::GetTabEn()' cannot be overloaded
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Oui mais ça ne te sert à rien que les deux fonctions aient le même nom
Tu veux faire ca:
ENREGISTREMENT* e = GetTabEn();
std::deque<ENREGISTREMENT> d = GetTabEn();

Quelle différence avec ca?
ENREGISTREMENT* e = GetTabEn1();
std::deque<ENREGISTREMENT> d = GetTabEn2();
_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
165
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
24 octobre 2007

Evidemment je peux faire ca mais je tiens à garder le même nom :) mais si c'est pas possible tant pis, mais ca serait dmg
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
On n'a pas le droit de surcharger une fonction en changeant seulement le type de retour:
le seul truc que tu peux faire c'est passer un pointeur (ou un ref) pour récupérer la valeur, dans ce cas la surcharge est possible :

definition:
GetTabEn((ENREGISTREMENT*)&rReturn,...);
GetTabEn((std::deque<ENREGISTREMENT>)&rReturn);

utilisation:
ENREGISTREMENT* A;
std::deque<ENREGISTREMENT> B;
GetTabEn(A);
GetTabEn(B);
Messages postés
165
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
24 octobre 2007

ok, et avec les template (oops, on est dans le forum C me suis trompé, si on pouvait déplacer en C++ ), ca n'est pas possible ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
C'est déplacé. Montre nous un bout de code que tu voudrais pouvoir écrire (même si ca ne compile pas), pour qu'on comprenne ce que tu veux.

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
165
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
24 octobre 2007

Je connais pas du tout les templates, donc je vais dire n'importe quoi je pense ^^

template <class T = ENREGISTREMENT, deque<ENREGISTREMENT> >
T GetTabEn()
{ ... }

Ce qui donne en francais : avoir mon propre type de retour qui en regroupe 2
Messages postés
165
Date d'inscription
samedi 4 juin 2005
Statut
Membre
Dernière intervention
24 octobre 2007

bon finalement c'est une grosse connerie puisque la fonction ne saurait pas quoi retourner entre les 2 types. Je vais donc contourner le probleme comme on me le proposait merci