Surcharger une fonction (sans changer la signature)

julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007 - 15 mars 2007 à 23:50
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007 - 18 mars 2007 à 11:37
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

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

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

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
17 mars 2007 à 11:52
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 mars 2007 à 13:33
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
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
17 mars 2007 à 13:36
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
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
17 mars 2007 à 17:54
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);
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
17 mars 2007 à 20:19
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 ?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 mars 2007 à 20:42
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
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
17 mars 2007 à 20:51
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
0
julien_boss Messages postés 165 Date d'inscription samedi 4 juin 2005 Statut Membre Dernière intervention 24 octobre 2007
18 mars 2007 à 11:37
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
0
Rejoignez-nous