BE #3 - Opérateurs et classe générique

ELC a 11 - Programmation des interfaces graphiques en C++


Surcharge d’opérateurs

Complétez la classe DamierDyn du TD #2 (dont un corrigé est disponible à côté de l’énoncé) en programmant les opérateurs suivants :

  • Opérateur = : qui modifie l’objet à gauche de l’opérateur en un objet identique (mais indépendant) à celui de droite.
    • Exemple : d1 = d2;. L’objet d1 est redimensionné par cette opération.
  • Opérateur + : qui ajoute les cases respectives de chaque damier si ceux-ci ont les mêmes dimensions.
    • Exemple : d3 = d1+d2;
  • Opérateur += : qui ajoute un nombre entier à toutes les cases du tableau.
    • Exemple : d1 += 3;
  • Opérateur << : qui affiche le tableau dans la console.
    • Exemple : cout << d1;

Chaque opérateur doit être vérifié et testé, avant de passer au suivant.


Classes génériques

  • Créez une classe générique DamierDynG qui, sur le modèle de la classe DamierDyn, permettra de gérer des matrices de booléens, d’entiers, de flottants (et pourquoi pas des matrices d’objets provenant d’une autre classe). Testez votre classe avec le type float :
int main(int argc, char *argv[])
{
    DamierDynG<float> Dfloat(2,2);
    Dfloat.Init(-1.4f);
    Dfloat += 4.5f;
    Dfloat.Set(1,0, 13.4f);
    cout << Dfloat;

    return 0;
}
  • Comment se comporte votre classe si vous manipulez des tableaux de booléens ? En particulier, faites attention aux valeurs par défaut de certains paramètres (quel sens à 0 vis-à-vis du type booléen ?). Que se passe-t-il lorsque l’on additionne 2 tableaux de booléens :
int main(int argc, char *argv[])
{
    DamierDynG<bool> Dbool(3,4);
    Dbool.Init(true);
    Dbool.Set(1, 1, false);
    Dfloat += false;
    DamierDynG<bool> Dbool2(3,4);
    Dbool2.Set(2, 2, true);
    cout << Dbool;
    cout << Dbool2;
    Dbool2 += Dbool;
    cout << Dbool2;

    return 0;
}

Remarque : Il est toujours possible d’ajouter une méthode spécifique pour traiter un cas particulier. Ainsi il faut programmer les méthodes

DamierDynG& operator+= (const DamierDynG<bool> &D);
DamierDynG& operator+= (G c);
DamierDynG  operator+  (const DamierDynG<bool> &D);

pour avoir le comportement souhaité. Plutôt que de générer le code automatiquement pour ces trois méthodes, le compilateur utilisera le code spécifique que vous aurez fourni par ce biais.