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.
© Copyright 2024 ExpyDoc