View
4.704
Download
5
Category
Preview:
DESCRIPTION
Citation preview
1
Chapitre 2: notions de classes, objets en C++
1
22
33
44
55
66
77
88
99
10
1111
1212
1313
1414
prenom=p; nom = n;
1515
…main(…) { ……….Personne P; Personne P1("ali" , " ben saleh“);P1.affichage();. …………..
void affichage() ;void modification(string , string);
Personne::affichage () {cout << prenom << endl << nom << endl;}
Personne:: modification ( string p, string n) {Prenom=p; nom= n;}
Prenom=« »; nom=« »;
P.modification(« ali1 », « hj»);P.affichage();
}
16
compte(double d) : actif(d) { }
17
1818
1919
20
Objet statique
21
22
Objet dynamique
……………………
23
24
25
26
27
28
Problème constructeur par copie implicite (variables dynamiques)
Copier membre à membre un pointeur signifie que ptr de l'objet y pointe au même endroit que ptr de l'objet x (une recopie d'adresse).!
29
30
31
class T { int *ptr; int nbre;public : T(const T& t2) { nbre= t2.nbre; ptr = new int[nbre]; for (int i=0; i<nbre ; i++) ptr[i]= t2.ptr[i]; }…..}………T t1;….. Remplir les elémént de t1 [1, 3, 5]T t2=t1; // copie de t1 à t2
T t2(t1);
3232
3333
3434
3535
3636
3737
3838
3939
4040
ClassTestStatic a, b;
a.NbObjet =10;
4141
4242
4343
4444
4545
4646
4747
4848
4949
5050
5151
5252
Instanciation dynamique– Le destructeur
le destructeur est une méthode appelée lorsque l'objet est détruit. Le destructeur doit être impérativement écrit pour libérer la mémoire allouée de façon dynamique pendant la vie d'un objet.
class A { private: ... public: A(); // Constructeur par défaut ~A(); // Destructeur ... };
– Durée de vie d'un objetLe destructeur est appelé lorsque l'objet est détruit. Quand un objet est-il détruit ? Dans le cas d'une instanciation
automatique (c'est à dire non dynamique), l'objet est détruit à la fin du bloc dans lequel il a été déclaré.int main() { A a1; for(int i = 0; i<10; i++) { A a2; a2.afficher(); } // Destruction de a2 a1.afficher();} // Destruction de a1
5353
Instanciation dynamiqueL'allocation dynamique du C++ s'effectue avec les opérateurs new et delete, on doit absolument éviter d'utiliser les fonctions malloc et free qui sont propres
au C. L'allocation dynamique s'effectue avec l'opérateur new : l'objet est alloué puis initialisé par appel au constructeur.// Allocation dynamique d'un entier
int * ptr_entier = new int;
// Allocation dynamique d'un objet de classe Etudiant// Le constructeur par défaut est appelé
Etudiant * ptr_etudiant1 = new Etudiant; // Allocation dynamique d'un objet de classe Etudiant// Le constructeur avec un paramètre de type double est appelé
Etudiant * ptr_etudiant2 = new Etudiant(12.5); On utilise l'opérateur delete pour la suppression d'un objet dynamique. // Suppression de l'objet pointé par ptr_entier
delete ptr_entier;
// Suppression de l'objet pointé par ptr_etudiant1// Le destructeur de l'objet (de classe Etudiant) est appelé
delete ptr_etudiant1;
// Suppression de l'objet pointé par ptr_etudiant2// Le destructeur de l'objet (de classe Etudiant) est appelé
delete ptr_etudiant2;
5454
Exemple de tableau :
Tableau d’étudiants qui n’est pas dynamique :Etudiant promo2002[30];
L'allocation dynamique d'un tableau s'effectue comme suit :Etudiant * promo2003 = new Etudiant[30];
Dans ce cas là, il faut à la libération du tableau appeler l'opérateur delete [], sinon seul le premier élément du tableau sera effectivement détruit :
delete [] promo2003;
Instanciation dynamique
5555
5656
57
Exemple : 1
58
59
60
Exemple 2
61
62
63
64
Exemple 3
65
66
67
68
69
Exemple 4
70
71
72
Exemple 5
73
74
75
Recommended