子類別的Field取不到 |
答題得分者是:RootKit
|
alvin26
初階會員 發表:24 回覆:41 積分:28 註冊:2005-04-12 發送簡訊給我 |
請問各位大大,
我有一個 form, 上面有三個 button, 分別是: Create Animal Create Dog Show Kind 還有一個 Label , Dog 是繼承自 Animal, 為何在按下 Create Dog 之後(不管是不是有先按 Create Animal) 用 GetKind 無法取得任何值呢? 程式碼如下所示, [code delphi] unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls; type TForm1 = class(TForm) Label1: TLabel; btnShowKind: TBitBtn; btnCreateAnimal: TBitBtn; btnCreateDog: TBitBtn; procedure btnShowKindClick(Sender: TObject); procedure btnCreateAnimalClick(Sender: TObject); procedure btnCreateDogClick(Sender: TObject); private { Private declarations } public { Public declarations } end; type TAnimal = class public constructor Create; function GetKind:string; private FKind:string; end; type TDog = class(TAnimal) public constructor Create; private FKind:string; end; var Form1: TForm1; MyAnimal1 : TAnimal; implementation {$R *.dfm} procedure TForm1.btnShowKindClick(Sender: TObject); begin Label1.Caption:=MyAnimal1.GetKind; end; { TAnimal } constructor TAnimal.Create; begin self.FKind:='Animal'; end; function TAnimal.GetKind: string; begin Result:=self.FKind; end; { TDog } constructor TDog.Create; begin self.FKind:='Dog'; end; { Form } procedure TForm1.btnCreateAnimalClick(Sender: TObject); begin MyAnimal1:=TAnimal.Create; end; procedure TForm1.btnCreateDogClick(Sender: TObject); begin FreeAndNil(MyAnimal1); MyAnimal1:=TDog.Create; end; end. [/code]
------
弟子規,聖人訓,首孝悌,次謹信,泛愛眾,而親仁,有餘力,則學文。 |
RootKit
資深會員 發表:16 回覆:358 積分:419 註冊:2008-01-02 發送簡訊給我 |
完完全全,問題一堆亂七八糟。表示沒看書就來亂地。
TDog Create 既沒有 Virtual、Override 或 Inherited 哪來繼承 TAnimal Create 設定為 self.FKind:='Animal'; 並且 TDog 的FKind 及 Tanimal 的 FKind 是各別兩個變數。 所以 GetKind 方法是永遠取得 TAnimal 的FKind。 但你又TDog 又沒繼承 TAnimal 的Create 方法。 故 TAnimal 的 FKind 當然為空白值。 這樣你了不了。 |
alvin26
初階會員 發表:24 回覆:41 積分:28 註冊:2005-04-12 發送簡訊給我 |
===================引 用 RootKit 文 章=================== 完完全全,問題一堆亂七八糟。表示沒看書就來亂地。 TDog Create 既沒有 Virtual、Override 或 Inherited 哪來繼承 TAnimal Create 設定為 self.FKind:='Animal'; 並且 TDog 的FKind 及 Tanimal 的 FKind 是各別兩個變數。 所以 GetKind 方法是永遠取得 TAnimal 的FKind。 但你又TDog 又沒繼承 TAnimal 的Create 方法。 故 TAnimal 的 FKind 當然為空白值。 這樣你了不了。 ---------------------------------------- 不好意思啦 RootKit 大大, 我了解了。 其實我是看不太懂書中的意思, 那個範例就是從書中抄下來的, 我略加修改而已,您別不高興啦
------
弟子規,聖人訓,首孝悌,次謹信,泛愛眾,而親仁,有餘力,則學文。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |