Classes,fonctions polymorphes,pointeurs,objets

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

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.