bonjour à tous,

voilà après avoir arpenté la faq et consulté les quelques post qui traitaient le sujet, j'ai toujours quelques doutes dans ce dommaine. Donc je m'en remets à vous pour éclaircir tout ça.

Pour ce qui est de l'utilisation des références en paramètes de fonctions, c'est tout simple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
MaClasse::use_param_ref_const(const UneAutreClasse& a) // lecture seule
{
    // code...
}
 
MaClasse::use_param_ref(UneAutreClasse& a) // lecture et écriture
{
    // code...
}
mais pour le retour, y-a-t'il une différence entre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
const UneAutreClasse&
MaClasse::return_param_ref_const(void)
{
    // code...
}
// et
UneAutreClasse&
MaClasse::return_param_ref(void) 
{
    // code...
}
sachant que l'on peut écrire (je crois) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
    UneAutreClasse UneClasse = objMaClasse.return_param_ref_const();
    UneAutreClasse UneClasse = objMaClasse.return_param_ref();
et pour ce qui est de l'objet retourné sachant qu'un :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
(const) UneAutreClasse&
MaClasse::return_param_ref(void) 
{
    UneAutreClasse tmp;
    // code...
    return tmp;
}
ne fera que planté le prog puisque qu'un objet local sera détruit en fin de fonction (contraitement aux types prédéfinis, ex. : int, long, unsigned...., soit dit en passant je vois pas pourquoi eux aussi ne seraient pas détruits, peut être que je mélange tout...)

pour pallier à tout ce mic-mac, j'ai recensé plusieurs solutions (mais y-en-t'il d'autres ??) :

- utilisé une reférence sur un objet static :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
(const) UneAutreClasse&
MaClasse::return_param_ref(void) 
{
    static UneAutreClasse tmp;
    // code...
    return tmp;
}
le hic, c'est que je ne sais pas si mon static existera pour toutes mes instances de la classe MaClasse, ou bien si chaque instance de MaClasse aura son propre static. De plus sa durée de vie serait-elle équivalente à celle de sa classe qui le contient ou à tout le programme ??

- ensuite, utilisé un objet dynamic
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
(const) UneAutreClasse&
MaClasse::return_param_ref(void) 
{
    UneAutreClasse tmp = new UneAutreClasse ;
    // code...
    return *tmp;
}
bon, problème évident c'est que ce sera à la fonction appelante de se charger du delete, pas pratique du tout ...

- et enfin, placé la référence en param
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
void
MaClasse::modify_param_ref(UneAutreClasse& a) 
{
    // code qui modifie a...
}
à part que ça n'a plus trop une tête d'accesseur , ça le mérite de fonctionner...

voilà exposer mes doutes, j'aimerais connaître vos opinions sur le sujet et savoir quelles solutions vous utilisez...