[C++] Surcharge de fonction spéciale

Surcharge de fonction spéciale [C++] - Programmation

Marsh Posté le 10-09-2001 à 14:23:57    

Est-ce possible de surcharger une fonction ayant le même nom, les même paramètres mais un type de retour différent?
Voici mon cas:
 
enum STATUSA
{
...
};
 
enum STATUSB
{
...
};
 
class A
{
private:
STATUSA status;
public:
STATUSA GetStatus() {return status;}
};
 
class B : public A
{
private:
STATUSB status;
public:
STATUSB GetStatus() {return status;}
};
 
Voila pourquoi j'ai besoin de surcharger la fonction GetStatus() de cette facon, car il y a une liste de status pour A et une autre pour B.
Vous me dirrez "t'a qu'a mettre des noms différents aux deux fonctions" Mais j'ai envie qu'elles aient le même nom c'est plus logique! Et la vous me dirrez "C'est pas logique ton code hahaha!" :)
Bref sans déconner vous savez comment je peux faire ca?

Reply

Marsh Posté le 10-09-2001 à 14:23:57   

Reply

Marsh Posté le 10-09-2001 à 14:34:44    

Non ,on ne peut pas!

Reply

Marsh Posté le 12-09-2001 à 03:11:56    

Ou alors utilise des classes au lieu d'enums et fait hériter STATUSB de STATUSA.
 
Dans ce cas, B::GetStatus() devrait toujours retourner une valeur de type "const STATUSA&" (plutôt que "STATUSA" ), mais tu pourras aussi lui faire renvoyer une instance de STATUSB.

Reply

Marsh Posté le 12-09-2001 à 10:29:10    

L'attribut status est dans les 2 cas private donc C OK.
 
La méthode GetStatus() retourne un type différent mais n'a pas de paramètres différents donc aucun moyen pour le compilo de savoir laquelle tu appelles.
 
De plus Si tu veux GetStatus() qui retourne STATUSA dans la classe B, ben tu essayes d'accéder à un attribut private, alors il aime pas...
 
A mon avis ca a aucun sens de vouloir faire ca (GetStatus qui retourne un type différent). Puisque dans ton code quand tu appelleras GetStatus tu devras déjà présupposer ce qu'il va te sortir comme type. Donc aucun intéret de surcharger...


---------------
Tout n'est pas si facile, tout ne tient qu'à un fil.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed