Vous êtes sur la page 1sur 3

Programmation Oriente Objet

Test d'valuation

On suppose que l'on dispose de la classe Animal ainsi dfinie :

class Animal
{
protected:
string nom ;
bool espece_rare ;
public:
Animal(string ch, bool erare) {nom = ch; espece_rare = erare ; cout << "Un animal est n \n" ; }
Animal() { nom = "chien" ; espece_rare = false ; }
~Animal(){ cout << "Un animal est mort \n" ;}
void presenter() ;
};

1. Implmenter la fonction presenter qui afffiche le nom de l'animal et indique s'il appartient ou
non une espce rare.
L'affichage doit prendre cette forme : L'animal s'appelle nom et appartient une espce rare
ou alors L'animal s'appelle nom et n'appartient pas une espce rare .
void Animal::presenter()
{
cout << "L'animal s'appelle " << nom;
if(espece_rare)
cout << " et appartient une espce rare" << endl;
else
cout << " et n'appartient pas une espce rare" << endl;
}

2. Dclarer maintenant la classe Vivipare qui hrite de la classe Animal et y ajoute l'attribut
entier gestation qui correspond au nombre de mois de gestation pour cette espce.
3. Dclarer et dfinir un constructeur paramtrique, un destructeur pour la classe Vivipare.
Dans le constructeur et le destructeur on rajoutera respectivement les messages Un
Vivipare est n Un Vivipare est mort .
class Vivipare : public Animal
{
protected:
int gestation;
public:
Vivipare(string, bool, int);
~Vivipare();
};

Vivipare::Vivipare(string ch, bool erare, int gest): Animal(ch, erare)


{
gestation = gest;
cout << "Un Vivipare est n" << endl;
}
Vivipare::~Vivipare()
{
cout << "Un vivipare est mort" << endl;
}

4. Dclarer maintenant la classe Ovipare qui hrite de la classe Animal et y ajoute l'attribut
entier nb_oeufs qui correspond au nombre d'oeufs moyen pour cette espce.
5. Dclarer et dfinir un constructeur paramtrique, un destructeur pour la classe Ovipare.
Dans le constructeur et le destructeur on rajoutera respectivement les messages Un
Ovipare est n Un Ovipare est mort .

class Ovipare : public Animal


{
protected:
int nb_oeufs;
public:
Ovipare(string, bool, int);
~Ovipare();
};

Ovipare::Ovipare(string ch, bool erare, int nbo): Animal(ch, erare)


{
nb_oeufs = nbo;
cout << "Un Ovipare est n" << endl;
}

Ovipare::~Ovipare()
{
cout << "Un Ovipare est mort" << endl;
}

6. Dans la fonction main, dclarer de manire statique un objet poule de type Ovipare.
Donner le rsultat de l'excution de ce programme.

Ovipare poule("poule", false, 1);

// Le rsultat d'excution du prgramme :


Un animal est n
Un Ovipare est n
Un Ovipare est mort
Un animal est mort

7. Dans la fonction main, dclarer de manire dynamique un objet vache de type Vivipare.
Donner le rsultat de l'excution de ce programme.

Vivipare *vache = new Vivipare("vache", false, 8);

// Le rsultat d'excution du prgramme :


Un animal est n
Un Vivipare est n

// Si on rajoute cette instruction


delete vache ;

//alors on obtient
Un vivipare est mort
Un animal est mort
8. On suppose que l'objet vache appelle la fonction presenter. Que verrons nous l'cran.
vache->presenter() ;

// Rsultat l'cran
L'animal s'appelle vache et n'appartient pas une espce rare

9. Donner le diagramme UML correspondant ces 3 classes.

10. On suppose que l'on veut crer un autre classe Ovovivipare qui hrite de Vivipare et
Ovipare. Comment utilise-t-on le mot virtual pour viter la duplication des donnes au
niveau d'un objet de type Ovovivipare.

class Vivipare : public virtual Animal { //... } ;


class Ovipare : public virtual Animal { //... } ;
class Ovovivipare : public Ovipare, public Vivipare { //... } ;