Bonjour
j'ai un code sur les constructeur et destructeur et il y a qq truc que je n'ai pas compris sur dans le C++ :
j'obtiens le résultat suivant à l'écran :
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
51
52
53
54
55 #include<iostream.h> #include<string.h> class demo { int x,y; public: //Constructeur 1 demo(int abs=1, int ord=0) { x=abs;y=ord; cout << "Constructeur I : "<< x << " " << y << "\n"; } //Constructeur 2 (par recopie) demo(demo&); //Destructeur ~demo(); }; demo::demo(demo & d) { cout<<"Constructeur II ( recopie ) : "<<d.x<<" "<<d.y<<"\n"; x=d.x;y=d.y; } demo::~demo() { cout<<"Destruction : "<<x<< " "<<y<<"\n"; } void fct(demo d, demo *add) { cout << "Entree fct\n"; delete add; cout << "Sortie fct\n"; } void main(void) { cout << "Debut Main\n"; demo a; demo b=2; demo c=a; demo *adr= new demo(3,3); // pointeur ici de type demo fct(a,adr); demo d = demo(4,4); c=demo(5,5); cout<<"Fin Main\n"; }
questions :
au 1er tirer rouge
pk y a t'il accès au constructeur par recopie? et pk t'a il les valeurs 1 et 0 au lieu de 3 et 3 ?
j'ai crée un objet avec (3,3) et je dis juste qu'il y a un pointeur (*adr ou adr?) de type demo qui pointe sur new demo(3,3)
ensuite qd j'entre dans la fonction "fct", j'efface "adr" donc j'efface le pointeur donc le programme va détrire l'objet demo(3,3) et je sors de la fonction et là il détruit l'objet (1,0) ! (2ème tiret rouge) je susi étonné étant donné que dans la fonction "fct" , j'ai remarqué que &d avait x et y avec 1 et 0 mais qu'à aucun moment dans cette fonction j'ai utilisé cet objet (1,0) donc je vois pk il serait détruit.
3ème tiret : pk à peine crée, l'objet (5,5) est détruit alors que la fonction main n'est pas encore terminée??
4ème tiret : je sais que la destruction se fait dans l'order inverse de création, donc (5,5) a été détruit, (4,4) aussi, mais d'où sort cet objet (5,5) détruit?
j'y pense, objet et classe c pareil?? j'ai utilisé le mot objet pour désigner les classe de types demo.
MERCI d'avance.
Partager