TD3

D´
epartement d’Informatique
Facult´
e des Sciences, Universit´
e Ibn Zohr
Agadir
TD-3, C++, SMI5
Exercice 1 :
Donner la sortie du programme C++ suivant. Pr´eciser le nombre d’objets cr´e´es et celui
d’objets d´etruits.
#include<iostream.h>
class point{
int abs, ord;
public:
point(){
cout<<"++ point par defaut"<<endl;
abs=ord=0;
}
point(int a, int b){
cout<<"++ point normal"<<endl;
abs=a; ord=b;
}
point(point & p){
cout<<"++ point clonage"<<endl; abs=p.abs; ord=p.ord;
}
~point(){
cout<<"-- point "<<endl;
}
};
class
droite{
point s1,s2;
public:
droite(){
cout<<"++
}
droite(int a, int
cout<<"++
}
~droite(){
cout<<"-}
};
void main(){
point a, b(1,2);
point *d=new point(b);
point *e=new point;
droite t(1,2,3,4);
}
droite par defaut"<<endl;
b, int c, int d):s1(a,b),s2(c,d){
droite normal"<<endl;
droite "<<endl;
Exercice 2 :
Soit une classe vecteur3d d´efinie comme suit:
class vecteur3d
{
float x,y,z;
public:
vecteur3d(float c1=0.0, float c2=0.0, float c3=0.0)
{x=c1; y=c2; z=c3;}
....
};
1. Introduire une fonction membre nomm´ee coincide permettant de savoir si deux
vecteurs ont les mˆemes composantes:
(a) en utilisant une transmission par valeur;
(b) en utilisant une transmission par adresse;
(c) en utilisant une transmission par r´ef´erence.
Si v1 et v2 d´esignent 2 vecteurs de type vecteur3d, comment s’´ecrit le test de coincidence de ces 2 vecteurs, dans chacun des 3 cas consid´er´es?
2. Introduire une fonction membre nomme normax permettant d’obtenir parmi deux
vecteurs, celui qui a la plus grande norme On pr´evoira trois situations:
(a) le r´esultat est renvoy´e par valeur;
(b) le r´esultat est renvoy´e par r´ef´erence, l’argument ´etant ´egalement transmis par
r´ef´erence;
(c) le r´esultat est renvoy´e par adresse, l’argument ´etant ´egalemnt transmis par
adresse.
3. D´efinir le constructeur de recopie correspondant.
4. Surcharger l’op´erateur + afin que les instructions suivantes seront accept´ees par le
compilateur:
vecteur3d v1(2,3,4), v2(0,1,-1), v3;
v3 = v1+v2;// v3 sera(2,4,3)
5. On souhaite modifier les composantes d’un vecteur `a partir de la fonction
cin (cin>>v1). Donner la fonction surcharg´ee correspondante.
6. Surcharger la fonction cout (cout<<v2).
7. Adapter la classe vecteur3d pour qu’elle dispose d’une fonction membre nombre fournissant le nombre de points existant `a un instant donn´e.
8. Donner un programme (main) permettant d’appeler les diff´erentes fonctions membre
de la classe vecteur3d.
Exercice 3 :
R´ealiser une classe pile1 nomm´ee Pile permettant de manipuler des ensembles de nombres
entiers. Les ´el´ements seront conserv´es dans un tableau qui sera allou´e dynamiquement par
le constructeur de la classe, et qui sera d´etruit par le destructeur. Les donn´ees membres
permettront de connaˆıtre :
• l’adresse du tableau (int *adr),
1
La pile est repr´esent´ee par un tableau dynamique au lieu d’une liste chaˆın´ee
• le nombre maximum d’´el´ements du tableau (int dim),
• et le nombre courant d’´el´ements dans le tableau (int nelem).
La classe comportera les fonctions membres suivantes:
• Pile(int n): constructeur allouant dynamiquement un emplacement de n entiers. Si
la valeur de n n’est pas fournie, le constructeur allouera par d´efaut un emplacement
de vingt entiers,
•
Pile(Pile & e):constructeur de recopie,
• ~Pile(): destructeur;
• void empile(int p): ajoute l’entier p sur la pile;
• int depile(): fournit la valeur de l’entier situ´e en haut de la pile, en le supprimant
de la pile,
• int pleine(): fournit la valeur 1 si la pile est pleine, 0 sinon,
• int vide(): fournit 1 si la pile est vide, 0 sinon,
• int appartient(int p): fournit 1 si l’entier p appartient `a la pile, 0 sinon.
Surcharge des op´
erateurs: Surcharger les op´erateurs < et > pour qu’ils jouent les
mˆemes rˆoles ques les fonctions empile et depile respectivement.