J'essaie d'adapter un programme C++ trouvé dans un bouquin pour comprendre la création des objets sur la pile mais j'ai pas dû tout comprendre...
voici le code C++
voici mon adaptation en delphi
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 class O2 { public: void procedureO2() { cout << "Appel procedure de O2" << endl; } }; class O1 { private: O2* objO2; /* pointeur vers un objet de type O2 */ public: O1(O2* objO2) { this->objO2 = objO2; /* passage du référent */ } void ProcedureO1() { objO2 -> procedureO2(); /* l'envoi de message */ } }; int main(int argc, char* argv[]) { O2* obj2Tas = new O2(); /* un objet construit dans le tas */ O2 obj2Pile; /* un objet construit sur la pile */ O1* obj1Tas = new O1( obj2Tas ); /* passage du référent */ O1* obj11Tas = new O1( &obj2Pile ); /* passage du référent de l'objet pile */ O1 obj1Pile ( obj2Tas ); O1 obj11Pile( &obj2Pile ); obj1Tas ->procedureO1(); obj11Tas->procedureO1(); obj1Pile .procedureO1(); obj11Pile.procedureO1(); return 0; }
Merci d'avance !
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 unit O1; interface uses O2; type TO1 = class (TObject) private objO2: TO2; // pointeur vers un objet de type TO2 public constructor Create(obj02: TO2); procedure ProcedureO1; end; implementation constructor TO1.Create(obj02: TO2 ); begin self.objO2 := obj02; //passage du référent end; procedure TO1.ProcedureO1; begin objO2.ProcedureO2; //l'envoi de message end; end. //*************** unit O2; interface type TO2 = class (TObject) public procedure ProcedureO2; end; implementation procedure TO2.ProcedureO2; begin writeln('Appel procedure de TO2'); end; end. //*************** program UML2; {$APPTYPE CONSOLE} uses SysUtils, O1 in 'O1.pas', O2 in 'O2.pas'; var obj1Tas, obj11Tas, obj1Pile, obj11Pile: TO1; obj2Pile, obj2Tas: TO2; begin obj2Tas := TO2.Create; // un objet construit dans le tas obj1Tas := TO1.Create( obj2Tas ); // passage du référent obj11Tas := TO1.Create( obj2Pile ); // passage du référent de l'objet pile obj1Pile.Create( obj2Tas ); //<-- cree violation d'acces dans constructeur obj11Pile.Create( obj2Pile );//<-- cree violation d'acces dans constructeur obj1Tas.ProcedureO1; obj11Tas.ProcedureO1; obj1Pile.procedureO1; obj11Pile.procedureO1; obj1Tas.free; obj11Tas.free; obj2Tas.free; end.
Partager