EXAMEN POO 1
EXAMEN POO 1
EXAMEN POO 1
Section : M.I
PARTIE A :
Un équipement est caractérisé par les données suivantes:
* Code (entier)
* Cout d'achat
1.1)
1.2)
On souhaite accorder un rôle pour l'opérateur d'addition de deux équipements. L'addition de deux
objets e1 et e2 de la classe équipements doit fournir un objet équipement avec les règles suivantes:
Ecrire le code source de la classe equipement_transport avec les constructeurs, le destructeur , les
méthodes pour accéder aux données et les méthodes pour changer les données.
PARTIE B
On souhaite développer une template pour la classe liste pour gérer une liste chainée où les
éléments correspondent à un type quelconque.
2.1 )
on vous demande d'écrire le code source de la classe template liste. Cette classe doit disposer de :
- un constructeur
- un destructeur
- une méthode pour trier les éléments de la liste (dans l'ordre croissant )
Correction
#include <iostream>
T temp=*a;
*a=*b;
*b=temp;;
private:
E data;
element_liste *next;
public:
element_liste()
E get_data()
return(data);
E *get_pdata()
return(&data);
element_liste *get_next()
return(next);
}
element_liste **get_pnext()
return(&next);
this->data=data;
this->next=p;
};
private:
public:
liste()
first=NULL;
~liste()
{
element_liste<T> *p;
element_liste<T> *t;
for (p=first;p;)
t=p;
p=p->get_next();
delete t;
void inserer(T d)
p->set_data(d);
p->set_next(first);
first=p;
void view()
element_liste<T> *p;
for (p=first;p;p=p->get_next())
cout <<p->get_data()<<endl;
}
void delete_first()
if(first)
element_liste<T> *p=first;
first=first->get_next();
delete p;
if(*p)
if((*p)->get_next() ==NULL)
delete *p;
*p=NULL;
return;
else
r_delete_last((*p)->get_pnext());
void delete_last()
{
r_delete_last(&first);
void tri()
element_liste<T> *p,*t,*pmin;
for(p=first;p;p=p->get_next())
for(pmin=p,t=p->get_next();t;t=t->get_next())
if(t->get_data()<pmin->get_data())
pmin=t;
if(pmin != p)
permuter(p->get_pdata(), pmin->get_pdata() );
};
int main()
class liste<int> e;
e.inserer(10);
e.inserer(34);
e.inserer(6);
e.tri();
e.view();
e.delete_first();
e.delete_last();
e.view();
return 0;
2.3)
Ecrire une fonction main qui permet de tester la template liste pour le type equipement défini dans
la parte A.
* Expliquer pourquoi il est nécessaire de redéfinir l'opérateur < pour la classe équipement et
l'opérateur char *.
* Donner la surdéfinition de l'opérateur < pour la classe equipement (un équipement e1 est < à un
équipement e2 si le code de e1 est inferieur au code de e2)
Correction
int main()
class liste<equipement> e;
e.inserer(e1);
e.inserer(e2);
e.inserer(e3);
e.tri();
e.view();
e.delete_first();
e.delete_last();
e.view();
return 0;
Expliquer pourquoi il est nécessaire de redéfinir l'opérateur < pour la classe équipement et
l'opérateur char *.
Réponse :
La méthode tri de la template liste compare des objets avec l’opérateur <, la classe equipement doit
donc surdéfinir cet opérateur pour qu’il soit reconnu pat le compilateur dans l’évaluation de la
comparaison de deux objets de type equipement.
* Donner la surdéfinition de l'opérateur < pour la classe equipement (un équipement e1 est < à un
équipement e2 si le code de e1 est inferieur au code de e2)
Réponse
char s[100] ;