Bonjour,
J'ai un probl�me avec une m�thode 'const':

Soit une classe M2 (qui repr�sente une matrice), qui d�rive d'une classe M. Cette classe dispose d'une m�thode de normalisation, qui doit... normaliser, c'est � dire modifier la valeur des attributs, mais sans changer la "valeur globale" (ceux qui ont entendus parler de coordonn�es homog�nes me comprendront, pour les autres, c'est pas grave...)

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
struct M2 : public M
{
    void Normalize() const;
};
Cette m�thode doit �tre 'const' parce qu'utilis�e dans d'autre m�thodes 'const'. En g�n�ral, la parade consiste � d�clarer les attributs concern�s comme 'mutable'. Oui, mais ici, on n'y a pas acc�s, ils sont h�rit�s (et on ne peux pas modifier la classe de base M).

Cette normalisation consiste � diviser tous les termes par un coefficient, et pour �a, la classe de base me fournit une surd�finition de l'op�rateur '/':
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
struct M : public autre_classe
{
    M operator / ( double v ) const;
};
Ce que je veut �crire comme impl�mentation, c'est quelque chose comme:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
void M2::Normalize() const
{
    double k = ... // on calcule la bonne valeur
    *this = *this / k;
}
Mais �videmment, le compilo me jette, car this est un pointeur 'const', et donc interdit d'utiliser l'op�rateur d'affectation sur this d�r�ferenc�...

Je me doute qu'il y a une bidouille � faire avec un const_cast, mais j'ai essay� plusieurs trucs, et je n'arrive pas � m'en sortir. Il faudrait que je puisse enlever le caract�re 'const' de this, mais je ne suis pas s�r que �a soit possible.

Je patauge un peu, l�, merci pour votre aide.