1041Fermer1043
Kevin KoflerLe 08/05/2010 à 00:45
[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:embarrassedperator Rectangle ou un Rectangle::Rectangle(const Square &) pour faire la conversion transparente.