pointeur et reference

Le
dnanar
Bonjour,


J' essaye d' utiliser les références pour retourner un pointeur. En
fait, j' ai une classe qui possède un pointeur, et je voudrais
implementer une fonction "get" pour le pointeur. J' ai essayé de faire
comme ceci (ma classe se nomme "CASE", le pointeur appartenant à ma
classe se nomme "top"):

void CASE::getC(CASE& R)
{
R = *top;
return;
}

//main, myCase est une instanciation de la classe CASE
CASE test();
myCase.getC(1, test);
cout << test.num << endl;


Mais cela ne marche pas ! Quelqu' un aurait une idée svp ?


Merci d' avance.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Sylvain
Le #280654
dnanar wrote on 13/04/2006 21:48:

J' essaye d' utiliser les références pour retourner un pointeur. En
fait, j' ai une classe qui possède un pointeur, et je voudrais
implementer une fonction "get" pour le pointeur.


le point est: voulez vous retourner le *pointeur* membre (ce qui
autorise les cas où ce pointeur est null, mais force le test par le
client) ou une référence sur l'instance pointée (dans ce cas le client
utilise sans déréférencer mais la fonction ne peut plus gérer le cas où
lepointeur est null (sauf exception ou allocation à la demande, les 2
peuvent ne pas être acceptable).

glup, j'ai lu "fonction" sans voir votre prototype, donc c'est une
procédure.

J' ai essayé de faire comme ceci (ma classe se
nomme "CASE", le pointeur appartenant à ma
classe se nomme "top"):

void CASE::getC(CASE& R)
{
R = *top;
return;
}


que pensez vous qu'il advient si vous n'insérez pas un "return" ??
le code va continuer à la ligne suivante ?

CASE test();


ceci déclare une fonction nommée test qui retourne une instance de CASE,
vous ne vouliez pas faire cela, mais juste déclarer une instance, donc:

CASE test;

myCase.getC(1, test);


fonctionnera avec le chgt ci-avant, mais pourquoi ne pas écrire:

struct CASE {
int num;
CASE* top;
[const] CASE& getC() const {
return *top;
}
};

CASE& test = myCase.getC();

voire: cout << myCase.getC().num;

Sylvain.

Publicité
Poster une réponse
Anonyme