unit Unit2; interface uses Classes; type //Déclaration forward TClassB = class ; //Déclaration d'une métaclasse TClassAClass = classof TClassA; TClassA = class (TObject) private FClassB: TClassB; public constructor Create;overload; //Constructeur de copie constructor Create(A: TClassA; AClass: TClassAClass);overload; destructor Destroy;override; procedure Display(Lines: TStrings);virtual; end; TClassB = class(TObject) private FClassA: TClassA; FClassAA: TClassA; public constructor Create(Aref: TClassA; AClass: TClassAClass); procedure Display(Lines: TStrings); end; TClassA2 = class (TClassA) public procedure Display(Lines: TStrings);override; end; implementation { TClassA } constructor TClassA.Create; begin inherited; FClassB : = TClassB.Create(Self, TClassAClass(Self.ClassType)); end; constructor TClassA.Create(A: TClassA; AClass: TClassAClass); begin inherited Create; FClassB := A.FClassB; end ; destructor TClassA.Destroy; begin FClassB.Free; inherited; end; procedure TClassA.Display(Lines: TStrings); begin Lines.Append(''); Lines.Append('A => ' + Self.ClassName); Lines.Append('FClassB = > ' + FClassB.ClassName); end ; { TClassB } constructor TClassB.Create(Aref: TClassA; AClass: TClassAClass); begin inherited Create; FClassA : = ARef; //Utilisation du constructeur de copie FClassAA := AClass.Create(Aref, AClass); end ; procedure TClassB.Display(Lines: TStrings); begin Lines.Append(''); Lines.Append('B => ' + Self.ClassName); Lines.Append('FClassA = > ' + FClassA.ClassName); Lines.Append('FClassAA => ' + FClassAA.ClassName); //FClassA.Display(Lines); end ; { TClassA2 } procedure TClassA2.Display(Lines: TStrings); begin Lines.Append(''); Lines.Append('A2 => ' + Self.ClassName); Lines.Append('FClassB = > ' + FClassB.ClassName); end ; end.
procedure TForm1.Button1Click(Sender: TObject); var ClassA : TClassA; ClassB : TClassB; ClassA2 : TClassA2; begin Memo1.Clear; ClassA : = TClassA.Create; ClassA.Display(Memo1.Lines); ClassA2 := TClassA2.Create; ClassA2.Display(Memo1.Lines); //Les 2 membres seront du type TClassA2 ClassB := TClassB.Create(ClassA2, TClassA2); ClassB.Display(Memo1.Lines); ClassB.Free; //Les 2 membres seront du type TClassA ClassB := TClassB.Create(ClassA, TClassA); ClassB.Display(Memo1.Lines); ClassB.Free; ClassA.Free; ClassA2.Free; end ;
unit Unit2; interface uses Classes; type //Déclaration forward TClassB = class ; TClassA = class(TObject) private FClassB: TClassB; public constructor Create; destructor Destroy;override; procedure Display(Lines: TStrings);virtual; end; TClassB = class (TObject) private FClassA: TClassA; public constructor Create(Aref: TClassA); procedure Display(Lines: TStrings); end; TClassA2 = class(TClassA) public procedure Display(Lines: TStrings);override; end; implementation { TClassA } constructor TClassA.Create; begin inherited; FClassB := TClassB.Create(Self); end ; destructor TClassA.Destroy; begin FClassB.Free; inherited; end; procedure TClassA.Display(Lines: TStrings); begin Lines.Append(''); Lines.Append('A => ' + Self.ClassName); Lines.Append('FClassB = > ' + FClassB.ClassName); end ; { TClassB } constructor TClassB.Create(Aref: TClassA); begin inherited Create; FClassA : = ARef; end; procedure TClassB.Display(Lines: TStrings); begin Lines.Append(''); Lines.Append('B = > ' + Self.ClassName); Lines.Append('FClassA => ' + FClassA.ClassName); FClassA.Display(Lines); end ; { TClassA2 } procedure TClassA2.Display(Lines: TStrings); begin Lines.Append(''); Lines.Append('A2 => ' + Self.ClassName); Lines.Append('FClassB = > ' + FClassB.ClassName); end ; end. Et le code lié à un bouton sur une fiche comprenant, par ailleurs, un TMemo : <CODE>procedure TForm1.Button1Click(Sender: TObject); var ClassA : TClassA; ClassB : TClassB; ClassA2 : TClassA2; begin Memo1.Clear; ClassA : = TClassA.Create; ClassA.Display(Memo1.Lines); ClassA.Free; ClassA2 := TClassA2.Create; ClassA2.Display(Memo1.Lines); ClassB := TClassB.Create(ClassA2); ClassB.Display(Memo1.Lines); ClassB.Free; ClassA2.Free; end ;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionTClassB = class (TObject) private FClassA: TClassA; FClassAA : TClassA; public constructor Create(Aref: TClassA); procedure Display(Lines: TStrings); end; et
constructor TClassB.Create(Aref: TClassA); begin inherited Create; FClassA : = ARef; FClassAA := ARef; end ;
type //Déclaration forward TClassB = class ; TClassA = class(TObject) private FClassB: TClassB; public constructor Create;overload; //Constructeur de copie * constructor Create(A: TClassA);overload; destructor Destroy;override; procedure Display(Lines: TStrings);virtual; end; TClassB = class (TObject) private FClassA: TClassA; FClassAA: TClassA; public constructor Create(Aref: TClassA); procedure Display(Lines: TStrings); end; TClassA2 = class(TClassA) public procedure Display(Lines: TStrings);override; end; implementation { TClassA } constructor TClassA.Create; begin inherited; FClassB := TClassB.Create(Self); end ; *constructor TClassA.Create(A: TClassA); *begin * inherited Create; * FClassB : = A.FClassB; *end; destructor TClassA.Destroy; begin FClassB.Free; inherited; end; procedure TClassA.Display(Lines: TStrings); begin Lines.Append(''); Lines.Append('A = > ' + Self.ClassName); Lines.Append('FClassB => ' + FClassB.ClassName); end ; { TClassB } constructor TClassB.Create(Aref: TClassA); begin inherited Create; FClassA : = ARef; //Utilisation du constructeur de copie * FClassAA := TClassA.Create(FClassA); end ; procedure TClassB.Display(Lines: TStrings); begin Lines.Append(''); Lines.Append('B => ' + Self.ClassName); Lines.Append('FClassA = > ' + FClassA.ClassName); * Lines.Append('FClassAA => ' + FClassAA.ClassName); FClassA.Display(Lines); end ; { TClassA2 } procedure TClassA2.Display(Lines: TStrings); begin Lines.Append(''); Lines.Append('A2 => ' + Self.ClassName); Lines.Append('FClassB = > ' + FClassB.ClassName); end ; end.