Formations à l'informatique et à l'électronique

Auteur : SD
Créé le : 17-03-2018

Qt - Classe abstraite et polymorphisme

Rappels de cours

Logo Qt Creator

La vidéo ci-desous fait un rappel de cours sur les classes abstraites et le polymorphisme :

Exemple de code

Le diagramme de classe correspondant à l'exemple de code proposé est le suivant :

Diagramme de classe abstraite héritage

Remarque : Pour simplifier les classes Animal, Tortue et Lievre ont été implémentées dans les mêmes fichiers : animal.h et animal.cpp.

Le fichier "animal.h"

#ifndef ANIMAL_H
#define ANIMAL_H

/****************** LA CLASSE ANIMAL ******************/
#include <QLabel>

class Animal
{
protected :
// Pointeur vers un QLabel affichant une image de l'animal
QLabel* ptrUI;

public :
// Méthode d'initialisation commune à tous les animaux
void init();

// Méthode virtuelle, qui n'est pas implémentée dans la classe
// animal mais qui devra impérativement l'être dans les classes
// filles
virtual void avancer() = 0;

// Destructeur
virtual ~Animal();
};

/****************** LA CLASSE LIEVRE ******************/
class Lievre : public Animal {
public :
// Les classes filles ont leur constructeur
Lievre(QLabel* label);

// Méthode avancer qui est virtuelle dans la classe mère
void avancer();

// Destructeur
~Lievre();
};

/****************** LA CLASSE TORTUE ******************/
class Tortue : public Animal {
public :
// Les classes filles ont leur constructeur
Tortue(QLabel* label);

// Méthode avancer qui est virtuelle dans la classe mère
void avancer();

// Destructeur
~Tortue();
};

#endif // ANIMAL_H

Le fichier "animal.cpp"

#include "Animal.h"

/****************** LA CLASSE ANIMAL ******************/
void Animal::init() {
// Déplace l'Animal sur la gauche de la fenêtre
ptrUI->setFrameRect(QRect(0,ptrUI->frameRect().y(),ptrUI->frameRect().width(),ptrUI->frameRect().height()));
}

Animal::~Animal() {}

/****************** LA CLASSE LIEVRE ******************/
Lievre::Lievre(QLabel* label) {
ptrUI = label;
}

Lievre::~Lievre() {}

void Lievre::avancer() {
// Fait avancer le lièvre
ptrUI->setFrameRect(QRect(ptrUI->frameRect().x()+4,ptrUI->frameRect().y(),ptrUI->frameRect().width(),ptrUI->frameRect().height()));
}

/****************** LA CLASSE TORTUE ******************/
Tortue::Tortue(QLabel* label) {
ptrUI = label;
}

Tortue::~Tortue() {}

void Tortue::avancer() {
// Fait avancer la Tortue
ptrUI->setFrameRect(QRect(ptrUI->frameRect().x()+1,ptrUI->frameRect().y(),ptrUI->frameRect().width(),ptrUI->frameRect().height()));
}

télécharger le projet Qt complet au format zip

Résultat obtenu

Qt Polymorphisme Classe abstraite Animal Lievre Tortue

Articles connexes

Articles sur Qt


Vous avez apprécié cet article ? Partagez le !

Article connexe : Qt - Utiliser des éléments QML dans une interface graphique