全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:991
推到 Plurk!
推到 Facebook!

子類別的Field取不到

答題得分者是:RootKit
alvin26
初階會員


發表:24
回覆:41
積分:28
註冊:2005-04-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-01-11 10:18:36 IP:61.63.xxx.xxx 訂閱
請問各位大大,
我有一個 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-01-11 12:34:51 IP:61.222.xxx.xxx 訂閱
完完全全,問題一堆亂七八糟。表示沒看書就來亂地。

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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-01-11 16:55:59 IP:61.63.xxx.xxx 訂閱

===================引 用 RootKit 文 章===================
完完全全,問題一堆亂七八糟。表示沒看書就來亂地。

TDog Create 既沒有 Virtual、Override 或 Inherited 哪來繼承 TAnimal Create 設定為 self.FKind:='Animal';
並且 TDog 的FKind 及 Tanimal 的 FKind 是各別兩個變數。
所以 GetKind 方法是永遠取得 TAnimal 的FKind。

但你又TDog 又沒繼承 TAnimal 的Create 方法。
故 TAnimal 的 FKind 當然為空白值。

這樣你了不了。

----------------------------------------

不好意思啦 RootKit 大大,
我了解了。
其實我是看不太懂書中的意思,
那個範例就是從書中抄下來的,
我略加修改而已,您別不高興啦
------
弟子規,聖人訓,首孝悌,次謹信,泛愛眾,而親仁,有餘力,則學文。
系統時間:2024-04-26 2:01:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!