|
Sujet : [C++] je pete les plombs la |
| LeGreg |
ex:Code :
- class A {
- bool Vide();
- }
- bool Mafonction(const A& a) {
- if (a.Vide()) {
- // Erreur ici parce que a est une reference const
- // et donc on ne peut appeler que des methodes const
- }
- }
|
C'est une contrainte mais c'est
egalement une protection.
Evidemment c'est au programmeur de fixer
la semantique du const..
(rien ne t'interdit de definir Vide() const
et de changer l'etat interne de ton objet
dans ta methode)
Le passage par reference n'est pas toujours gagnant
a toi de voir si le surcout de copie de l'objet
(superficielle ou en profondeur) surpasse le fait de devoir acceder
constamment a cet objet par un pointeur.
exemple: passer un simple entier par reference est
une idee stupide. Passer une matrice par reference
est plus intelligent. Mais parfois tu es tout
de meme oblige de copier ta matrice pour pouvoir faire
des operations dessus, donc autant la passer
par valeur la premiere fois. De meme le fait
de passer un entier par reference permet
de modifier la valeur de l'entier d'origine
depuis la fonction et donc la reference s'impose.
A+
LEGREG |