[nosmile]D'ailleurs, dans l'autre topic,
j'ai proposé une solution qui repose sur le partage implicit (copy on write): on "copie" un
Square dans un
Rectangle, l'objet pointé n'est pas copié, c'est toujours un carré, on utilise
setWidth et paf, le rectangle pointe maintenant sur un
RectanglePrivate et on n'a pas touché au
SquarePrivate. La classe
SquarePrivate dérive de
RectanglePrivate, donc on peut utiliser le carré comme un rectangle en lecture sans le copier, l'écriture force de toute façon une copie.
Maintenant, que faire pour éviter qu'on fasse des conneries avec le polymorphisme des pointeurs (
Rectangle *)? Bah, soit on fait comme j'ai décrit dans l'autre topic (méthode virtuelle qui lance une exception si on l'utilise comme un carré), soit tout simplement on ne fait pas hériter
Square de
Rectangle, juste
SquarePrivate de
RectanglePrivate, et on utilise un
Square:
perator Rectangle ou un
Rectangle::Rectangle(const Square &) pour faire la conversion transparente.