Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

INTÉRÊT DE L’UTILISATION D’UNE CLASSE ABSTRAITE [DEV-CPP]


Information sur la source

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

  • #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;
  • }
#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;
}

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de zeratul67 le 25/03/2006 19:18:54

Je commence enfin à comprendre l'intérêt des classes abstraites ... merci pour ce petit exemple :)

signaler à un administrateur
Commentaire de magic_Nono le 26/03/2006 22:07:36

en effet, l'exemple standart de la plupart des cours sur l'héritage abstrait est sur les formes géométriques...

voici un autre exemple, sur différents types de fichiers à remplir:

http://www.cppfrance.com/codes/GESTION-COMMUNE-FORMATS-SORTIE-INTERFACE-COMMUNE-POUR-HTML_24520.aspx

magicalement
Nono.

signaler à un administrateur
Commentaire de samra_82 le 27/03/2006 13:16:26

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

signaler à un administrateur
Commentaire de Kleidp le 28/03/2006 20:03:36

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 ..

signaler à un administrateur
Commentaire de magic_Nono le 30/03/2006 10:28:46

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.

signaler à un administrateur
Commentaire de exar le 14/05/2006 14:27:39

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.

signaler à un administrateur
Commentaire de magic_Nono le 15/05/2006 16:04:17

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.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

tableau dynamique [ par azkab ] bonjour,dans mon programme j ai deux classes (classe 'rectangle' et classe 'cercle'). j ai une troisieme classe 'Objet' qui est l aggregation de ces d Comment ne colorier que l'interieur d'un triangle ou d'un cercle sour TC? [ par SurGeon1503 ] Voil&#224; mon probleme:pour un projet d'&#233;tude en C je programme un jeu de d&#232;s en graphique et j'aimerai mettre mes d&#232;s(5 rectangles av Faire une base virtuelle pure de classe abstraite pour hériter trois classes de listes chaînées [ par Dralnu ] Boujour &#224; tous, J'ai un petit probl&#232;me... Comment je peux faire pour faire une base virtuelle pure de classe abstraite pour h&#233;riter t MultiHéritage et Classe Forme [ par dumbadonf ] VOici le sujet du partiel de C++ de l'année dernière... Si quelqu'un l'a déjà fait ca serait super sympas de m'en faire profiter car le mien est cette programme triangle rectangle ou non [ par Phil974m ] j'ai un petit soucis avec mon programme qui ne gère pas correctement les données saisiej'ai fait un petit programme demandé dans mon bts iris qui cher Afficher unTriangle de Pascal en language C [ par shaqe80 ] shaqe80,s'il vous y aurait il quelqu'un de bienveillant pour m'aider à rabibocher ce programme?#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#defin comment je peut svp conner ou organizer ces cordonnés d'un rectangle en c++ [ par YuseFdev ] salut  ----svp--    en c++je construie une classe rectangle  quia 4 variable represente les cordonnéscomment je peut conner ou organizer ces cordonnés Dessiner un rectangle (mais aussi un carré) en mode console langage C [ par DeathRavage ] Problème : J'ai un soucis à propos de la prise en compte de la taille de ma verticale, elle n'est pas prise en compte. J'ai essayé d'arranger les chos Besoins d'aide pour faire un algorythme du triangle de pascal en C?? [ par Gokuan ] Hello tout le monde, Voilà, il faut que je fasse l'algorythme qui me permet de calculé le triangle de Pascal, mais j'essai mais je n'y arrive pas, al conteneur CList dans aplication du type paint [ par andarius40 ] bonjour,j'apprends le c++ avec le livre visual c++ 6 de ivor horton.(J'en suis au chapitre 6 pour ceux qui ont le livre)Lorsque je compile le programm


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,608 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.