This is an old revision of the document!
Nous considérons une classe Color
qui fournit deux méthodes, une méthode name()
qui retourne le nom de la couleur et une méthode rgbValue()
retourne les composants RGB de la couleur (Rouge, Vert & Bleue) au format 24 bits.
class Color { public: std::string name() const { return ""; } unsigned rgbValue24() const { return 0; } };
Nous souhaitons hériter que les objets Blue
, Red
et Green
qui héritent de cette classe redéfinisse les fonctions name
et rgbValue24
. L'objectif et que ces fonctions fournissent la bonne couleur.
class Red: public Color { public: std::string name() const { return "red"; } unsigned rgbValue24() const { return 0xFF0000; } }; class Red: public Color { public: std::string name() const { return "green"; } unsigned rgbValue24() const { return 0x00FF00; } }; class Blue: public Color { public: std::string name() const { return "blue"; } unsigned rgbValue24() const { return 0x0000FF; } };
Nous souhaitons désormais pouvoir utiliser ces couleurs pour remplir une surface:
void fillrect(const Color& theColor, int x, int y, int width, int height) { std::cout << "Fill the area [" << x << ", " << y << ", " << x + width << ", " << y + height << "] with color " << theColor.name() << "." << std::endl; }
Cependant, si nous exécutons le code suivant :
fillreact(Red(), 0, 0, 10, 10);
La sortie sera:
Fill the area [0, 0, 10, 10] with color .