在子類別中如何引用父類別中的變數 |
尚未結案
|
danielx2000
一般會員 發表:29 回覆:33 積分:22 註冊:2002-09-02 發送簡訊給我 |
請教各位;
因為我第一次用OO的觀念來coding,有一些地方還搞不清楚,請不吝指證 我宣告一個父類別Tsprite,
然後宣告一個子類別Tstudent 來繼承Tsprite並宣告成陣列型態TSpriteArray
,我的問題是,我在父類別中實作了一個 draw 繪出學生圖形的方法,
並在子類別的 students.shownameflag=true 時才一並秀出學生姓名,
那在這個例子中,Tsprite and Tstudent 類別要如何宣告才能讓Tsprite.draw 類別方法能看到Tstudent 類別內宣告的FShowNameFlag 變數?? 是不是要射程全域變數才行? Thanks -=======================================
TSprite = class private FStudentID: string; // student Id FStudentName: string; FClassName: string; // class name ... public constructor Create; virtual; destructor Destroy; override; procedure Draw(x,y:integer;Canvas: TCanvas); virtual; // 繪製角色 ... end; TSpriteArray = array[0..TILE_NUM_Y - 1, 0..TILE_NUM_X - 1] of TSprite; // 所有學生 // Student 類別 TStudent = class(TSprite) private FShowNameFlag: boolean; FStudent: TSpriteArray; procedure Set_ShowNameFlag(const Value: boolean); public property ShowNameFlag:boolean read FShowNameFlag write Set_ShowNameFlag; property Sprite[X, Y: Integer]: TSprite read GetSprite; default; ... end; var Students: TStudent; // 所有學生 implementation ... procedure TSprite.Draw(x,y:integer;Canvas: TCanvas); begin ... //繪出角色圖形 ... if ShowNameFlag then Canvas.textout(x,y,text);//秀出學生姓名; // 要如何宣告,才能看到 Tstudent下的 ShowNameflag變數 ... end; ... procedure TStudent.Set_ShowNameFlag(const Value: boolean); begin FShowNameFlag := Value; end; |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
我的想法: TSprite = class
private
FStudentID: string; // student Id
FStudentName: string;
FClassName: string; // class name
...
protected
...
//宣告為虛擬抽象函式
procedure Draw(x,y:integer;Canvas: TCanvas); virtual; abstract;// 繪製角色
...
end; TSpriteArray = array[0..TILE_NUM_Y - 1, 0..TILE_NUM_X - 1] of TSprite; // 所有學生 // Student 類別
TStudent = class(TSprite)
private
...
public
...
//Override it!
procedure Draw(x,y:integer;Canvas: TCanvas); override;
end; implementation
...
procedure TStudent.Draw(x,y:integer;Canvas: TCanvas);
begin
//繪出角色圖形
...
if ShowNameFlag then Canvas.textout(x,y,text);//秀出學生姓名;
end;
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
我的想法: TSprite = class
private
FStudentID: string; // student Id
FStudentName: string;
FClassName: string; // class name
...
protected
...
//宣告為虛擬抽象函式
procedure Draw(x,y:integer;Canvas: TCanvas); virtual; abstract;// 繪製角色
...
end; TSpriteArray = array[0..TILE_NUM_Y - 1, 0..TILE_NUM_X - 1] of TSprite; // 所有學生 // Student 類別
TStudent = class(TSprite)
private
...
public
...
//Override it!
procedure Draw(x,y:integer;Canvas: TCanvas); override;
end; implementation
...
procedure TStudent.Draw(x,y:integer;Canvas: TCanvas);
begin
//繪出角色圖形
...
if ShowNameFlag then Canvas.textout(x,y,text);//秀出學生姓名;
end;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |