Intérêt de l?utilisation d?une classe abstraite [dev-cpp]

0/5 (7 avis)

Vue 12 214 fois - Téléchargée 775 fois

Description

Ce programme très simple illustre l?intérêt de l?utilisation d?une classe abstraite. Avec des pointeurs de Forme (abstraite) on peut instancier n?importe quels objet des classes dérivées (Cercle,Triangle, ?). C?est alors que ça devient intéressant car les fonctions virtuelles de Forme une fois définies pour les classes héritées peuvent être utilisées sur les pointeurs sans s?occuper du type d?objet vers lesquels ils pointent !

Source / Exemple :


#include <iostream>
#include "cercle.h"
#include "rectangle.h"
#include "triangle.h"

// MISE EN OEUVRE //////////////////////////////////////////////////////////

using namespace std;

int main(int argc, char *argv[])
{
    Forme *pt[3]; // Pointeur car on ne peut instancier une classe virtuelle
    pt[0] = new Cercle(2.);
    pt[1] = new Rectangle(2.5,4.);
    pt[2] = new Triangle(3.,8.);
    
    for(int i = 0; i < 3; i++)
        cout << "Surface du " 
             << pt[i]->GetName() 
             << " : " 
             << pt[i]->Surface() 
             << endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

Codes Sources

A voir également

Ajouter un commentaire Commentaires
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 1
15 mai 2006 à 16:04
totalement exact, désolé, j'ai dût répondre un peu vite lors de mon dernier post.

les fonctions virtuelles sont redéfinissables dans les classes filles.

et ces dernieres refusent de compiler seulement si elles comportes des fonctions virtuelles pures (=0) non redéfinies.

Magicalement
Nono.
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 2
14 mai 2006 à 14:27
Magic_Nono:
Il me semble que c'est le fait que la méthode soit virtuelle pure (=0) qui impose sa présence dans les classes filles, si je ne me trompe pas, non ?
Quand une, fonction membre n'est pas virtuelle, la fct invoquée est celle définie dans le type statique de l'objet de classe(ou pointeur ou réf) à travers laquelle elle est invoquée. Quand une fct membre est virtuelle, la fct invoquée est celle définie dans le type dynamique de l'objet de classe.
Une fct membre virtuelle pure permet d'encapsuler la fct de manière indépendante du type dérivé. Ces fcts membres n'ont d'ailleurs pasx d'implémentation dans la clase de base.
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 1
30 mars 2006 à 10:28
cette classe est abstraite puisqu'elle ne peut avoir d'instance

le mots clef virtual impose que chaque classe fille possède cette méthode.

Magicalement
Nono.
Kleidp Messages postés 124 Date d'inscription jeudi 5 juin 2003 Statut Membre Dernière intervention 10 février 2008
28 mars 2006 à 20:03
Salut, juste deux petite question sur ta source (je débute sur la programmation objet):

- Dans ta description, tu dis que la classe Forme est une classe abstraite.
En fait (à ce que j'ai lu), ce n'est pas plutot une classe de base ou classe mère ?
Quel est la difference ?

- Tu as mis "virtual" devant les methotes de Forme. A quoi cela sert il ?

Merci pour vos réponses ..
samra_82 Messages postés 15 Date d'inscription samedi 25 mars 2006 Statut Membre Dernière intervention 28 mars 2006
27 mars 2006 à 13:16
Salut
Je trouve que c'est un exemple bien claire qui permet de comprendre l'utilité des classes abstraites pour les débutants dans la programmation orientée objet avec les commentaires qui le rend plus lisible.Merci
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.