User Tools

Site Tools


in204:cpp:syntax:class:virtual

This is an old revision of the document!


Méthodes virtuelles & Polymorphismes

Pourquoi les méthodes virtuelles

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 .
in204/cpp/syntax/class/virtual.1616917425.txt.gz · Last modified: 2021/03/28 07:43 by bmonsuez