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 :
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 MaClasse::use_param_ref_const(const UneAutreClasse& a) // lecture seule { // code... } MaClasse::use_param_ref(UneAutreClasse& a) // lecture et écriture { // code... }
sachant que l'on peut écrire (je crois) :
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... }
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 UneAutreClasse UneClasse = objMaClasse.return_param_ref_const(); UneAutreClasse UneClasse = objMaClasse.return_param_ref();
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...)
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; }
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 :
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 ??
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; }
- ensuite, utilisé un objet dynamic
bon, problème évident c'est que ce sera à la fonction appelante de se charger du delete, pas pratique du tout
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; }...
- et enfin, placé la référence en param
à part que ça n'a plus trop une tête d'accesseur
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... }, ç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...
Partager