Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fonction const et donnes membres de type pointeurs

2 réponses
Avatar
JBB
class A
{
public:
void set(int i){ _i = i;}
int get() const { return _i ;}
private:
int _i;
};

class B
{
public:
B(){ _A = new A();}

void set(int i) const { _A->set(i);}
int get() const { return _A->get();}

private:
A * _A;
};


int main()
{
B b;
b.set(1);
int i = b.get();

return 0;
}

Ca me gene quelque part que B::set puisse etre const.Pas vous?

2 réponses

Avatar
Fabien LE LEZ
On Thu, 15 Dec 2005 15:32:47 +0100, JBB :

Ca me gene quelque part que B::set puisse etre const.


Ben oui. Même si le compilateur l'accepte, c'est sémantiquement
incorrect.
Va falloir t'y habituer : un compilateur C++ accepte beaucoup de
choses fausses.

Avatar
Falk Tannhäuser
JBB wrote:

Ca me gene quelque part que B::set puisse etre const.Pas vous?


Pour le compilateur, le pointeur _A est membre de la classe B,
mais pas l'objet pointé. C'est au concepteur de la classe de
savoir si ledit objet fait partie de celle-ci d'un point de vue
logique (c.a.d. s'il représente de l'état observable) ou si le
pointeur ne fait qu'implémenter une simple relation d'association,
et de gérer l'accessibilité, la durée de vie et le "const" en
fonction.

On note que le cas en quelque sorte inverse peut se produire aussi -
un objet qui est membre d'une classe mais qui ne fait pas partie
de l'état observable (par exemple parce qu'il sert juste comme
cache) - c'est pour cela qu'il a été introduit "mutable".

Falk