Vous êtes sur la page 1sur 4

MIGS1 - Module algorithmique et programmation C/C++ TD 7 - Hritage e Exercice 1 : 1.

Faire une classe vect permettant de manipuler des vecteurs dynamiques dentiers (cest-`-dire dont la taille peut tre xe au cours de lexcution) a e e e dont la dclaration se prsente ainsi : e e
class vect {int nelem; // nombre delements int * adr; //adresse zone dynamique contenant les elements public : vect(int); //constructeur prcisant le nombre dlments ~vect(); destructeur int & operator[](int); //acces a un element par son indice }

2. Crer une classe vectb, drive de vect, permettant de manipuler des e e e vecteurs dynamiques, dans lesquels on peut xer les bornes des indices, lesquelles seront fournies au constructeur de vectb. La classe vect appara ainsi comme un cas particulier de vectb (la borne infrieure tant tra e e 0). On ne se proccupera pas, ici, des probl`mes ventuellement poss par e e e e la recopie ou laectation dobjets de type vectb. 3. Faire un programme principal qui permette de tester que tout marche bien. 4. Comment aurions-nous pu dnir operator[] dans vectb si le membre adr e avait t dacc`s protected au lieu de private? ee e Exercice 2 : 1. Quels seront les rsultats fournis par ce programme : e
#include <iostream> using namespace std; class A {int n; float x; public : A(int p=2) { n=p;x=1; cout << " construction objet A :" << n << " } }; class B {int n; float y;

"<< x <<"\n";

public : B(float v=0.0) { n=1;y=v; cout << "construction objet B : " << n <<" "<< y <<"\n"; } }; class C : public B, public A {int n; int p; public : C(int n1=1,int n2=2, intn3=3, float v=0.0) : A(n1), B(v) { n=n3;p=n1+n2; cout << " construction objet C :" << n << " " << p << "\n"; } }; int main() {C c1; C c2(10,11,12,5.0); return 0; }

2. Mme question si lon remplace len-tte du constructeur de C par : e e C(int n1=1, int n2=2, int n3=3, float v=0.0) : B(v) 3. Mme question si lon remplace len-tte du constructeur de C par : e e C(int n1=1, int n2=2, int n3=3, float v=0.0) Exercice 3 : Quels seront les rsultats fournis par ce programme : e
#include <iostream> using namespace std; class A {int na; public : A(int nn=1) {na=nn; cout << "construction objet A" << na << "\n" ; } }; class B : public A {float xb; public : B(float xx=0.0) { xb=xx; cout << " construction objet B" << xb <<"\n"; }

}; class C : public A {int nc; public : C(int nn = 2) : A (2*nn+1) { nc=nn; cout << "construction objet C" << nc << "\n"; } class D : public B, public C {int nd; public : D(int n1, int n2, float x) : C(n1), B(x) { nd=n2; cout << "construction objet D" << nd << "\n"; } }; int main() { D d (10, 20, 5.0); return 0; }

Exercice 4 : 0- Commencer par implmenter une classe liste permettant de manipuler des e listes cha ees dentiers. La dclaration de la classe liste se prsentera ainsi : n e e
struct element // structure dun element de la liste {element * suivant; //pointeur sur lelement suivant int contenu; }; class liste { element * debut; // pointeur sur le premier element element * courant; // pointeur sur lelement courant public : liste(); // constructeur ~liste(); //destructeur void ajoute(int); // ajoute un element en debut de liste element * premier(); element * prochain(); int fini(); };

Pour explorer la liste, on a prvu trois mthodes publiques: e e 1. premier qui donne ` courant ladresse du premier lment de la liste et a ee renvoie son adresse. 2. prochain qui renvoie ladresse de courant et donne ` courant ladresse de a llment dapr`s. Des appels successifs de prochain permettent de paree e courir la liste.

3. ni qui permet de savoir si courant a atteint la n de la liste. 1- On souhaite maintenant crer une classe liste permettant de manipuler des e listes cha ees dans lesquelles la nature de linformation associe ` chaque noeud n e a de la liste nest pas connue (par la classe). La dclaration de la classe liste se e prsentera ainsi : e
struct element {element * suivant; void * contenu; //pointeur sur un objet quelconque }; class liste {element * debut; // pointeur sur le premier element element * courant; // pointeur sur lelement courant public : liste(); // constructeur ~liste(); //destructeur void ajoute(void * p); // ajoute un nouvel element en debut de liste de contenu p element * premier(); element * prochain(); int fini(); };

2- Soit la classe point suivante :


class point {int x, y; public : point(int abs=0, int ord=0){x=abs;y=ord;} void affiche(){cout << "Coordonnees : " << x <<" "<<y "\n";} };

En vous aidant de len-tte ci-dessous, crer une classe listepoints drive de e e e e liste permettant de manipuler des listes cha ees de points. On devra pouvoir n ajouter un point en dbut de liste et disposer dune fonction membre ache e achant les informations associes ` chacun des points de la liste de points. e a
class listepoints : public liste { public : void affiche(); listepoints(){}; }

3- Ecrire un programme dessai. 4- Refaire une liste cha ee de points en utilisant cette fois-ci un patron de classe n de liste.

Vous aimerez peut-être aussi