Classes,fonctions polymorphes,pointeurs,objets

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 320 fois - Téléchargée 36 fois

Contenu du snippet

Salut tt le monde!
L interet d une fonction polymorphe est kelle reagit en fonction du type d objet et non en fonction du type de pointeur.

Source / Exemple :


#include <iostream.h>
#include <conio.c>

class Samurai

{
   protected :
      char statut[20+1];
      int  life;
      int  defense;
   
   public : 
      Samurai(char *stat, int hp, int def);//constructeur.
      virtual void show();//fonction polymorphe(virtuelle).
};

class Magicien : public Samurai

{
   protected :
     int magie;
  
   public :
     Magicien(char *stat, int hp, int def, int mag);//constructeur.
     virtual void show();//fonction polymorphe(virtuelle).
};

Samurai::Samurai(char *stat,int hp, int def)

{
strcpy(statut, stat);
life = hp;
defense = def;
}

void Samurai::show()

{
cout<<"\nL objet suivant a \202t\202 cr\202e :\n\n";
cout<<"\nSatut :"<<statut;
cout<<"\nLife :"<<life;
cout<<"\nDefense :"<<defense;
getch();
}

Magicien::Magicien(char *stat, int hp, int def, int mag)
         :Samurai(stat, hp, def)
{
magie = mag;
}

void Magicien::show()

{
cout<<"\nL objet suivant a \202t\202 cr\202e :\n\n";
cout<<"\nStatut :"<<statut;
cout<<"\nLife :"<<life;
cout<<"\ndefense :"<<defense;
cout<<"\nMagie :"<<magie;
getch();
}

int main()
{
Samurai *pSam = NULL;
int choix = 0;

    while(1)
    {
    
        textcolor(WHITE);
        cout<<"\n\nChoisissez un type de personnage a creer :\n\n";
        textcolor(LIGHTRED);
        textbackground(WHITE);
        cout<<"[ 1 ]";
        textcolor(WHITE);
        textbackground(false);
        cout<<" - Samurai\n\n";
        textcolor(LIGHTRED);
        textbackground(WHITE);
        cout<<"[ 2 ]";
        textcolor(WHITE);
        textbackground(false);
        cout<<" - Magicien\n\n";
        textcolor(LIGHTRED);
        textbackground(WHITE);
        cout<<"[ 0 ]";
        textcolor(WHITE);
        textbackground(false);
        cout<<" - Quitter\n\n\n";
        textcolor(LIGHTRED);
        cin>>choix;
        textcolor(WHITE);
        
        switch (choix)
        {
           case 1 : { pSam = new Samurai("SAMURAI",500,200);}break;
           
           case 2 : { pSam = new Magicien("MAGICIEN",350,300,200);}break;
           
           case 0 : { if(pSam!=NULL) delete pSam;
                      return 0; }break;
           
           default : { cout<<"Erreur-[choix non valide].\a\n"; getch();}continue;
        }
        
     cout<<"\n\n";
     pSam->show();//on appelle show en fonction du type dobjet cree.
     delete pSam;
     pSam = NULL;
     clrscr();
        
    }

}

//La fontion polymorphe(virtuelle) show() est bien appelee en fonction du type d objet
//et non en fonction du type de poiteur.Sinon le programme utilisera unikemen la fonction
//show() de la classe Smurai.

Conclusion :


Bonn prog!

A voir également

Ajouter un commentaire

Commentaires

cs_Lightness1024!
Messages postés
162
Date d'inscription
jeudi 15 mars 2001
Statut
Membre
Dernière intervention
1 avril 2005
-
lol ca fait penser aux trips de microsoft avec leurs chiens et leurs renards.
sinon moué bien mais c vrai ke les samuraï et les magiciens ca embrouille mais si t fan de ca.... :)
Cr0w
Messages postés
25
Date d'inscription
dimanche 6 octobre 2002
Statut
Membre
Dernière intervention
10 avril 2006
-
ok mais l'histoire du magicien qui hérite du samurai ne va pas aider a la compréhension de tous !

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.