掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
inheriteの使い方は? (ID:20374)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
クラスの型宣言とoverride, overload されたメソッドの動作の違いがわかる・・・かも。 type {A___} TClassA =class Data: Integer; constructor Create; virtual; function HogeHoge:Integer; virtual; function GClass(aDClass: TClassA): String; end; {B___} TClassB =class(TClassA) constructor Create; override; function HogeHoge:Integer; override; function GClass(aDClass: TClassB): String; overload; end; {C___} TClassC =class(TClassB) function HogeHoge:Integer; override; function GClass(aDClass:TClassC): String; overload; end; {D___} TClassD =class(TClassB) function HogeHoge:Integer; override; end; THogeForm = class(TForm) ListBox1: TListBox; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private ClassA1 :TClassA; ClassB1 :TClassB; ClassC1 :TClassC; ClassD1 :TClassD; ClassA2, ClassB2, ClassC2, ClassD2 :TClassA; public { Public 宣言 } end; implementation {A___} constructor TClassA.Create; begin inherited Create; Data := 1; end; function TClassA.HogeHoge:Integer; begin Result := Data; end; function TClassA.GClass(aDClass: TClassA): String; begin Result := 'ClassA1'; end; {B___} constructor TClassB.Create; begin inherited Create; Data := 2; end; function TClassB.HogeHoge:Integer; begin Result := inherited HogeHoge; Result := Result + 10; end; function TClassB.GClass(aDClass: TClassB): String; begin Result := 'ClassB1'; end; {C___} function TClassC.HogeHoge:Integer; begin Result := Data * 2; end; function TClassC.GClass(aDClass: TClassC): String; begin Result := 'ClassC1'; end; {D___} function TClassD.HogeHoge:Integer; begin Result := inherited HogeHoge; Result := Result + 1000; end; procedure THogeForm.FormCreate(Sender: TObject); begin ClassA1 := TClassA.Create; ClassB1 := TClassB.Create; ClassC1 := TClassC.Create; ClassD1 := TClassD.Create; ClassA2 := TClassA.Create; ClassB2 := TClassB.Create; ClassC2 := TClassC.Create; ClassD2 := TClassD.Create; end; procedure THogeForm.FormDestroy(Sender: TObject); begin ClassA1.Free; ClassB1.Free; ClassC1.Free; ClassD1.Free; ClassA2.Free; ClassB2.Free; ClassC2.Free; ClassD2.Free; end; procedure THogeForm.Button1Click(Sender: TObject); begin ListBox1.Items.Clear; with ListBox1.Items do begin Add('A1: ' + Format('%5d', [ClassA1.HogeHoge])); Add('B1: ' + Format('%5d', [ClassB1.HogeHoge])); Add('C1: ' + Format('%5d', [ClassC1.HogeHoge])); Add('D1: ' + Format('%5d', [ClassD1.HogeHoge])); Add('A2: ' + Format('%5d', [ClassA2.HogeHoge])); Add('B2: ' + Format('%5d', [ClassB2.HogeHoge])); Add('C2: ' + Format('%5d', [ClassC2.HogeHoge])); Add('D2: ' + Format('%5d', [ClassD2.HogeHoge])); end; end; procedure THogeForm.Button2Click(Sender: TObject); begin ListBox1.Items.Clear; with ListBox1.Items do begin {A} Add('A1-A1: ' + ClassA1.GClass(ClassA1)); Add('A1-B1: ' + ClassA1.GClass(ClassB1)); Add('A1-C1: ' + ClassA1.GClass(ClassC1)); Add('A1-D1: ' + ClassA1.GClass(ClassD1)); {B} Add('B1-A1: ' + ClassB1.GClass(ClassA1)); Add('B1-B1: ' + ClassB1.GClass(ClassB1)); Add('B1-C1: ' + ClassB1.GClass(ClassC1)); Add('B1-D1: ' + ClassB1.GClass(ClassD1)); {C} Add('C1-A1: ' + ClassC1.GClass(ClassA1)); Add('C1-B1: ' + ClassC1.GClass(ClassB1)); Add('C1-C1: ' + ClassC1.GClass(ClassC1)); Add('C1-D1: ' + ClassC1.GClass(ClassD1)); {D} Add('D1-A1: ' + ClassD1.GClass(ClassA1)); Add('D1-B1: ' + ClassD1.GClass(ClassB1)); Add('D1-C1: ' + ClassD1.GClass(ClassC1)); Add('D1-D1: ' + ClassD1.GClass(ClassD1)); {A} Add('A2-A2: ' + ClassA2.GClass(ClassA2)); Add('A2-B2: ' + ClassA2.GClass(ClassB2)); Add('A2-C2: ' + ClassA2.GClass(ClassC2)); Add('A2-D2: ' + ClassA2.GClass(ClassD2)); {B} Add('B2-A2: ' + ClassB2.GClass(ClassA2)); Add('B2-B2: ' + ClassB2.GClass(ClassB2)); Add('B2-C2: ' + ClassB2.GClass(ClassC2)); Add('B2-D2: ' + ClassB2.GClass(ClassD2)); {C} Add('C2-A2: ' + ClassC2.GClass(ClassA2)); Add('C2-B2: ' + ClassC2.GClass(ClassB2)); Add('C2-C2: ' + ClassC2.GClass(ClassC2)); Add('C2-D2: ' + ClassC2.GClass(ClassD2)); {D} Add('D2-A2: ' + ClassD2.GClass(ClassA2)); Add('D2-B2: ' + ClassD2.GClass(ClassB2)); Add('D2-C2: ' + ClassD2.GClass(ClassC2)); Add('D2-D2: ' + ClassD2.GClass(ClassD2)); end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.