Bonjour,
je travail sur un exercice en C++ où c'est demander de compléter une classe Point:
de façon qu’elle dispose de deux fonctions membre permettant de connaître, à tout instant, le nombre total d’objets de type point, ainsi que le nombre d’objets dynamiques (c’est-à-dire créés par new) de ce même type.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class point { int x, y ; // ....... public : point (int abs=0, int ord=0) // constructeur // ..... } ;
ma proposition, qui compile sans erreur, de code est la suivante:
je veux bien savoir, s'il vous plait, la différence entre mon code et l'intérêt de surdéfinir new et delete dans la correction proposée par le correcteur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 #include <iostream> static int compteur_objet=0; class point { int x, y ; public : point (int abs=0, int ord=0) // constructeur { x=abs; y=ord; compteur_objet++; } ~point() { compteur_objet--; } // ..... static int fct() { return compteur_objet; } } ; using namespace std; int main() { point p(1,2); point *h; point* q=new point(2,4); int c=point::fct(); cout<<"le nombre d'objet cree est "<<c<<endl; delete q; return 0; }
compilation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 #include <stddef.h> // pour size_t #include <iostream> using namespace std ; class point { static int npt ; // nombre total de points static int nptd ; // nombre de points dynamiques int x, y ; public : point (int abs=0, int ord=0) // constructeur { x=abs ; y=ord ; npt++ ; } ~point () // destructeur { npt-- ; } void * operator new (size_t sz) // new surdéfini { nptd++ ; return ::new char[sz] ; // appelle new prédéfini } void operator delete (void * dp) { nptd-- ; ::delete (dp) ; // appelle delete prédéfini } static int npt_tot () { return npt ; } static int npt_dyn () { return nptd ; } } ; int point::npt = 0 ; // initialisation des membres statiques de point int point::nptd = 0 ; #include "point.h" #include <iostream> using namespace std ; main() { point * ad1, * ad2 ; point a(3,5) ; cout << "A : " << point::npt_tot () << " " << point::npt_dyn () << "\n" ; ad1 = new point (1,3) ; point b ; cout << "B : " << point::npt_tot () << " " << point::npt_dyn () << "\n" ; ad2 = new point (2,0) ; delete ad1 ; cout << "C : " << point::npt_tot () << " " << point::npt_dyn () << "\n" ; point c(2) ; delete ad2 ; cout << "D : " << point::npt_tot () << " " << point::npt_dyn () << "\n" ; }
merci !A : 1 0
B : 3 1
C : 3 1
D : 3 0
Partager