Académique Documents
Professionnel Documents
Culture Documents
TD 7 - Héritage
Exercice 1 :
1. Faire une classe vect permettant de manipuler des vecteurs dynamiques
d’entiers (c’est-à-dire dont la taille peut être fixée au cours de l’exécution)
dont la déclaration se présente ainsi :
class vect
{int nelem; // nombre d’elements
int * adr; //adresse zone dynamique contenant les elements
public :
vect(int); //constructeur prcisant le nombre d’lments
~vect(); destructeur
int & operator[](int); //acces a un element par son indice
}
Exercice 2 :
#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 << " "<< x <<"\n";
}
};
class B
{int n;
float y;
1
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;
}
Exercice 3 :
Quels seront les résultats fournis par ce programme :
#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";
}
2
};
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 implémenter une classe liste permettant de manipuler des
listes chaı̂nées d’entiers. La déclaration de la classe liste se présentera ainsi :
struct element // structure d’un element de la liste
{element * suivant; //pointeur sur l’element suivant
int contenu;
};
class liste
{
element * debut; // pointeur sur le premier element
element * courant; // pointeur sur l’element courant
public :
liste(); // constructeur
~liste(); //destructeur
void ajoute(int); // ajoute un element en debut de liste
element * premier();
element * prochain();
int fini();
};
3
3. fini qui permet de savoir si courant a atteint la fin de la liste.
1- On souhaite maintenant créer une classe liste permettant de manipuler des
listes chaı̂nées dans lesquelles la nature de l’information associée à chaque noeud
de la liste n’est pas connue (par la classe). La déclaration de la classe liste se
présentera ainsi :
struct element
{element * suivant;
void * contenu; //pointeur sur un objet quelconque
};
class liste
{element * debut; // pointeur sur le premier element
element * courant; // pointeur sur l’element 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();
};