亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

Delphi中的類和對象

2019-11-18 18:39:27
字體:
供稿:網(wǎng)友
  談?wù)凞elphi中的類和對象
1.登不了大雅之堂地理解幾個概念
   說到類和對象,我們不能不提及這樣幾個概念:類,對象,實例。就我個人覺得可
以這樣來理解:對象指的是泛稱,自然界的任何實體都可以看成一個對象;而類則是
以這些對象某些特征而分成的一系列的種類;實例則是特指屬于某一個類的一個對象。
好啦,這些大道理我就不用多說了。不如來一個“背道而馳”的作法,我們用Delphi
code 來闡述這些外國人提出的一些令我們中國人不好理解的概念吧:
var
  ABtn:TButton;
義ABtn是屬于TButton類的一個對象,但ABtn不能說是一個實例,因為它還沒有
創(chuàng)建,所以我們說這是定義了一個對象,如果說定義了一個實例,多多少少有
些不夠確切。:)
begin
  ABtn:=TButton.Create(Self);//創(chuàng)建一個TButton的實例
  ABtn.Caption:='對象';
  ABtn.Free;
end;

2.對象是一個地地道道的指針
   從物理角度來看,對象就是一段地址空間,這段地址空間的標(biāo)志就是我們定義的
類“變量”。所以我們可以把對象看成一個類的指針。大家知道,要訪問一個指針就
必須對指針初始化。對象的既然是一個指針,也必須對它進(jìn)行初始化。如何初始化呢?
還是說指針的初始化吧。對于一個指針可以有以下兩種方法來進(jìn)行初始化:
(一)直接分配
var
  Pint:^Integer;
begin
  new(Pint);
  Pint^:=12;
  Dispose(Pint);
end;
(二)指向別的已分配空間的變量
var
  Pint:^Integer;
  i:integer;
begin
  i:=12;
  Pint:=@i;
end;
有趣的是,對象這種“指針”也有兩種方法初始化
(一)直接分配
var
  AForm:TForm;
begin
  AForm:=TForm.Create(Self);
  AForm.ShowModal;
  AForm.Free;
end;
(二)指向別的已分配空間的實例
var
  AForm:TForm;
begin
  AForm:=Self;
  AForm.Caption:='知道了嗎?為什么會這樣呢';
end;
file://這個AForm和它所指向的Form實例共用同一段地址單元,所有對AForm操作都將反應(yīng)
file://到它所對應(yīng)的Form實例之上。
說到這,我們就很好解釋為什么過程(函數(shù))的對象參數(shù)傳遞時,象這樣這的格式:
(一)PRocedure SetEdit(var Edit:TEdit);
    begin
      Edit.Text:='11';
    end;

(二)procedure SetEdit(Edit:TEdit);
    begin
      Edit.Text:='11';
    end;
效果是一樣的了。(一)是把一個TEdit實體作為參數(shù)引用的形式進(jìn)行參數(shù)傳遞,(二)是
把一個TEdit的對象“指針”作為參數(shù)傳遞。

3.類可以理解成一種特殊的數(shù)據(jù)類型
    我們知道數(shù)據(jù)類型可以進(jìn)行強制類型轉(zhuǎn)化,類即然可以理解成一種數(shù)據(jù)類型,那
么它也應(yīng)該可以進(jìn)行類類型轉(zhuǎn)。比方如下代碼為一個按鈕(Button1)的單擊事件:
(一)
procedure TForm1.Button1Click(Sender: TObject);
var
  ACaption:String;
begin
  ACaption:=TButton(Sender).Caption;//Sender從TObject轉(zhuǎn)化到TButton
  ShowMessage(Format('You clicked ''%s'' !',[ACaption]));
end;
在這段代碼中,Sender是一個TObject型對象,我們把它強制轉(zhuǎn)化為TButton類型。如你
看得不清楚,可以參照一下我們通常的數(shù)據(jù)類型的轉(zhuǎn)化:
(二)
procedure TForm1.Button1Click(Sender: TObject);
var
  S_Str:String;
  P_Str:PChar;
begin
  S_Str:='I love China!';
  P_Str:=PChar(S_Str);
  S_Str:='';
  S_Str:=String(P_Str);
  ShowMessage(S_Str);
end;
但是在面對對象的程序設(shè)計過程中,強調(diào)的是安全性,如(一)的強制類型轉(zhuǎn)化存在著不
安全性。如下的代碼,依然是寫B(tài)utton1.OnClick事件:
(三)
procedure TForm1.Button1Click(Sender: TObject);
begin
  TCanvas(Sender).Brush.Color:=clRed;
end;
執(zhí)行一下,就會出錯。這樣豈不是違背了面對對象的程序設(shè)計的宗旨了嗎?沒有,即然
是類,就應(yīng)該有類特定的類強制轉(zhuǎn)化方法,改(三)的方法如下:
(四)
procedure TForm1.Button1Click(Sender: TObject);
begin
  (Sender as TCanvas).Brush.Color:=clRed;
end;//用as來轉(zhuǎn)化,as就可以把錯誤抓住,不會影響程序的正常運行。
說到這我順便提一下VB吧,如果學(xué)過VB的人可能覺得其中的控件數(shù)組比較爽,尤其是在
編寫象計算器這樣的程序時。但Delphi給我們什么呢?答案是Delphi也能快速簡潔的開
發(fā)出這樣的程序。如是操作:在窗體上放一個Edit和十個Button,把Button.Caption分
別設(shè)為'0','1','2',...'9',然后寫一個按鈕的OnClick事件如下:
(五)
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text:=Edit1.Text+(Sender as TButton).Caption;
end;
把別的Button的OnClick事件都關(guān)聯(lián)到Button1Click上,運行程序。拍拍手!這樣計算器
程序的雛形就具備了。我們用Delphi的類類型轉(zhuǎn)化,開發(fā)出來類似VB中的控件數(shù)組功能
的程序也是很棒的嘛!:)

4.抽象類和它的實例
    Delphi中有一種類為抽象類,你不能天真的直接為它創(chuàng)建一個實例。如:TStrings
類。如下代碼:
(一)
var
  StrLst:TStrings;
begin
  StrLst:=TStrings.Create;
  StrLst.Add('I love Japan!');
  StrLst.Free;
end;
這是不對的。那如何為諸如TStrings這樣的抽象類構(gòu)造實例呢?答案是借助它的非抽
象子類。我們知道TStrings有一個TStringList非抽象子類。我們就可以這樣作:
(二)
var
  StrLst:TStrings;
begin
  StrLst:=TStringList.Create;//借助其子類的構(gòu)造器,對StrLst進(jìn)行子類化
  StrLst.Add('I love China!');
  StrLst.Free;
end;
(三)
var
  StrLst:TStringList;
begin
  StrLst:=TStringList.Create;
file://放棄吧,不要再用抽象類,完全用它的“兒子”來你的事吧 
  StrLst.Add('I love China!');
  StrLst.Free;
end;

5.類是一種對數(shù)據(jù)和操作高度的封裝機制
(一)數(shù)據(jù)封裝
unit Unit2;

interface
type
  TEmployee=class
  private
    FName:String;
  public
    Constructor Create;
    function  GetName:String;
    procedure SetName(AName:String);
  end;
implementation

{ TEmployee }

constructor TEmployee.Create;
begin
  FName:='BlazingFire';
end;

function TEmployee.GetName: String;
begin
  Result:=FName;
end;

procedure TEmployee.SetName(AName: String);
begin
  FName:=AName;
end;

end.
如上代碼,我們就用了一個過程SetName和一個函數(shù)GetName對私有變量FName進(jìn)行完全的
封裝。我們要對FName操作就只有這樣:
uses
  unit2;
procedure TForm1.Button1Click(Sender: TObject);
var
  AEmployee:TEmployee;
begin
  AEmployee:=TEmployee.Create;
  AEmployee.SetName('Rose');//利用SetName來設(shè)置FName
  MessageBox(Handle,PChar(AEmployee.GetName),'Empoyee',0);
  file://用GetName來訪問FName
  AEmployee.Free;
end;
(二)操作封裝
unit Unit2;

interface
type
  TDivision=Class
  public
    file://多態(tài)性讓你的程序更據(jù)有“柔韌性”
    function GetDiv(Num1,Num2:Double):Double;overload;
    function GetDiv(Num1,Num2:integer):integer;overload;
  end;
implementation

{ Division }

function TDivision.GetDiv(Num1, Num2: Double): Double;
begin
  try
    Result:=Num1/Num2;
  except
    Result:=0;//提供彈形處理機制,處理除數(shù)為0情況
  end;
end;

function TDivision.GetDiv(Num1, Num2: integer): integer;
begin
  try
    Result:=Num1 div Num2;
  except
    Result:=0;//提供彈形處理機制,處理除數(shù)為0情況
  end;
end;

end.
如上代碼我們通過類的多態(tài)性機制把除法分別處理成整除和非整除,又通過異常處理屏
去除數(shù)為0的情況,從而保證操作的安全性,在調(diào)用時,我們就可以這樣來:
uses
  unit2;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Division:TDivision;
  IValue:integer;
  FValue:Double;
begin
  Division:=TDivision.Create;
  IValue:=Division.GetDiv(1,2);
  FValue:=Division.GetDiv(1.0,2);
  IValue:=Division.GetDiv(1,0);
  FValue:=Division.GetDiv(1.0,0);
  Division.Free;
end;
 
6.類是一種代碼重用機制
    比方在5中我們想對這個類加上一個GetAdd函數(shù)來作加法運算就可以用類的繼承。如
下寫就可以了:
(一)
unit Unit2;

interface
type
  TDivision=Class
  public
    function GetDiv(Num1,Num2:Double):Double;overload;
    function GetDiv(Num1,Num2:integer):integer;overload;
  end;
type
  TOperation=Class(TDivision)
  public
    function GetAdd(Num1,Num2:Double):Double;
  end;
implementation

{ Division }

function TDivision.GetDiv(Num1, Num2: Double): Double;
begin
  try
    Result:=Num1/Num2;
  except
    Result:=0;
  end;
end;

function TDivision.GetDiv(Num1, Num2: integer): integer;
begin
  try
    Result:=Num1 div Num2;
  except
    Result:=0;
  end;
end;

{ TOperation }

function TOperation.GetAdd(Num1, Num2: Double): Double;
begin
  Result:=Num1+Num2;
end;

end.
這里我們從TDivision繼承了一個子類TOperation。TOperation就可以即有TDivsion
公有方法GetDiv,又有自己的獨特的方法GetAdd。這是類為我們提供的“魚和熊掌兼
得”之法。不錯吧。:)


上一篇:Delphi中關(guān)于TApplication類的詳解

下一篇:Delphi版OpenGL樣例代碼導(dǎo)游

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網(wǎng)友關(guān)注

日韩视频在线一区二区| 日韩精品一区不卡| 欧美肥婆xxxx欧美另类| 啪啪av大全导航福利网址| 97人人精品| 午夜精品无码一区二区三区| 中文在线天堂库| 久久久久久久久久久久国产| 阿v天堂2018| 五月丁香综合缴情六月小说| 日本一区二区三级电影在线观看| 九九九在线观看| 三年片大全在线观看大全有哪些| 成人激情视频在线观看| 日韩二区三区在线观看| 亚洲五月婷婷| 国产一区二区三区在线| 成人爽a毛片免费啪啪红桃视频| 看黄的a网站| av网址在线| 青青草免费在线视频观看| 国产黑丝一区二区| 欧美日韩第一| a毛片在线看免费观看| 性视频在线播放| 一卡二卡三卡在线观看| 日韩在线一区二区三区| 国产无遮挡在线视频免费观看| 中文在线字幕免费观看| 国产精品麻豆一区二区三区| 91在线国内视频| 可以免费观看av毛片| 欧美色就是色| 午夜激情在线观看视频| 99视频精品全部免费在线| 亚洲国产日韩综合一区| h免费在线观看| 国产精品综合色区在线观看| 激情小说激情视频| 精品一区二区三区久久| 男人天堂v视频| 伦理av在线| 五月婷婷激情五月| 黄色片在线观看网站| 可以看毛片的网址| 黄色片久久久久| 午夜影院免费播放| 免费a在线观看播放| 亚洲av熟女高潮一区二区| 日韩福利视频在线| 国产精品传媒毛片三区| а天堂8中文最新版在线官网| 欧美顶级毛片在线播放| 国产综合av| 国产网红女主播精品视频| 国产精品99久久99久久久二8| 久久久久久av无码免费网站下载| 久久久久久国产精品免费播放| 国产一区二区波多野结衣| 精品国产大片大片大片| 久久福利一区二区| www.国产毛片| 久久全球大尺度高清视频| 精品午夜电影| 国产伦精品一区二区三区视频痴汉| 国产另类自拍| 麻豆tv在线| aaa在线播放视频| 国产成人精品777777| 国产网站一区二区三区| 992kp免费看片| 欧美著名女优| 美女脱光内衣内裤视频久久网站| 欧美激情亚洲自拍| 欧美中文字幕精在线不卡| 午夜视频久久久久久| 日本韩国欧美| 免费午夜视频在线观看| 中文字幕在线播放一区二区| 国产精品天天摸av网| 九九夜夜操妹子| 综合激情亚洲| 成人性生交大片| av网站在线播放| 91精品推荐| 一区精品视频| 丁香另类激情小说| 欧美日韩国产第一页| 色综合一区二区| 欧美日韩国产一区中文午夜| 中文字幕 日韩 欧美| 欧美一区二区在线观看视频| 日韩激情毛片| 国产精品中文字幕亚洲欧美| 欧美艳星brazzers| 一区二区三区.www| 久久人妻一区二区| 天干天干啦夜天干天2019| 国产精品久久国产精麻豆99网站| 国产91一区二区三区| 一区二区三区在线|网站| 国产美女高潮久久白浆| 一区二区三区四区在线免费观看| 夜夜嗨av禁果av粉嫩avhd| 欧美 日韩 国产 在线观看| 国产在线一二三| 久久精品视频在线观看榴莲视频| 99精品欧美一区二区三区综合在线| 九色国产蝌蚪视频| 在线丝袜欧美日韩制服| mm131亚洲精品| 久久精品亚洲热| 免费看日本黄色| 成人高清av| 欧美日韩中文字幕精品| 国内精品美女在线观看| 日韩性xxxx爱| 吞精囗交69激情欧美| 在线亚洲精品福利网址导航| 欧美午夜在线| 手机福利在线| 女生裸体视频一区二区三区| 日韩污视频在线观看| 国产精品一二二区| 免费成人进口网站| 国产黄色一区二区三区| 国产成人av电影| 欧美精品一区二区三区免费播放| 国产精品草莓在线免费观看| 麻豆传媒免费在线观看| 在线观看免费国产视频| 日韩欧美在线国产| av在线资源站| 黄色的电影在线-骚虎影院-骚虎视频| av成人亚洲| 亚洲色图50p| 久久久久久久久久网| 在线亚洲天堂| 搞黄视频免费在线观看| 欧美激情区在线播放| 国产精品手机播放| 亚洲天堂av电影| 99精品人妻无码专区在线视频区| 极品美女一区二区三区| 欧美激情一区二区三区在线视频观看| chinese偷拍一区二区三区| 91社区在线观看| 亚洲综合清纯丝袜自拍| 青青操在线视频| 欧美中日韩在线| 综合136福利视频在线| av最新在线观看| 激情小说综合网| 鲁大师精品99久久久| 亚洲欧美天堂在线| 97视频免费在线| 成人激情免费网站| 精品播放一区二区| 欧美激情在线| 国产成人精彩在线视频九色| 新版的欧美在线视频| 日韩av中文在线观看| 影音先锋男人资源站在线观看| 午夜精品久久久久久99热| 久久99精品国产自在现线| 五级黄高潮片90分钟视频| 国产大屁股喷水视频在线观看| 欧美性极品xxxx娇小| 日韩专区在线视频| 国产亚洲日本欧美韩国| 成人毛片免费在线观看| 亚洲自拍中文字幕| 欧美视频国产精品| 国产成人免费视频网站视频社区| 最近中文字幕大全中文字幕免费| 精品视频一二三区| 亚洲第一精品夜夜躁人人躁| 欧美高跟鞋交xxxxhd| 秋霞av一区二区三区| 三级黄色小视频| 免费一级全黄少妇性色生活片| 无码中文字幕色专区| 免费看av成人| 亚洲午夜精品久久久久久久久| 国产精品99久久久久久白浆小说| 最近中文字幕大全中文字幕免费| 欧美女优在线视频| 日韩jizzz| 欧美日韩另类在线| 国产99re66在线视频| 日韩在线精品强乱中文字幕| 欧美日韩国产一区二区三区地区| 91福利国产成人精品照片| 性欧美xxxx视频在线观看| 在线看的网站你懂| av片在线观看网站| 欧美aaa一级片| h视频免费在线| 亚洲麻豆一区| www.青青草.com| 国产二级片在线观看| 成人免费高清在线| 国产毛片一区二区三区va在线| www.夜夜操| 国产黄色网址在线观看| 国产一区二区成人| 亚洲加勒比久久88色综合| 免费看h片网站| a天堂视频在线| 成人高清免费观看mv| 国产网站免费在线观看| 视频一区亚洲| 性欧美18一19性猛交| 中文字幕亚洲欧美在线不卡| av香蕉成人| gogo人体一区| 天天干天天插天天操| 亚洲va欧美va人人爽成人影院| 国产视频第一页在线观看| 国产精品久久久久久久久久久久久久| 成a人片在线观看www视频| 亚洲一区二区精品3399| 亚洲+变态+欧美+另类+精品| 色偷偷久久一区二区三区| 亚洲天堂免费| 久久99国产精品尤物| 亚洲天堂男人的天堂| 日韩成人影音| 国产福利电影在线播放| 2023av在线| 亚洲熟妇一区二区三区| 欧美精品videosex牲欧美| 亚洲成人av观看| 综合毛片免费视频| 在线heyzo| 欧美亚洲高清一区二区三区不卡| 久久久久久不卡| 日本中文字幕高清| 亚洲一区观看| 国产精品自偷自拍| 欧美日韩免费精品| 91网在线播放| 国产精品99一区二区三区| 亚洲黄色a级片| 亚洲精品在线影院| 99久久久国产精品| 欧美日韩亚洲另类| 日韩三级小视频| 香蕉成人app免费看片| 黄色av免费在线看| 国产一级特黄aaa大片| 国产精品高清乱码在线观看| 在线免费av网址| 97香蕉超级碰碰久久免费的优势| 欧美男女视频| 国产精品成av人在线视午夜片| 国产精品99久久久久久久久| 久久人人爽爽人人爽人人片av| 青青草视频在线视频| 91丨九色丨海角社区| 欧美精品一区二区精品网| 草莓视频18免费观看| 免费av在线一区二区| 九色porny丨国产精品| 免费看黄色三级| 天堂一区二区在线| 天天综合网在线| 人人狠狠综合久久亚洲婷婷| 亚洲欧美制服综合另类| 国产精品天美传媒沈樵| 在线播放/欧美激情| 久久99久国产精品黄毛片色诱| 天天操夜夜操夜夜操| 中文字幕在线播放第一页| 国产精品免费看| baoyu777.永久免费视频| 国产精品久久久久野外| 久草网站在线| 天堂在线一区二区三区| 午夜在线观看视频网站| 思思久久99热只有频精品66| 浮生影视网在线观看免费| 中文字幕佐山爱一区二区免费| 免费一区二区三区在线观看| 特级毛片在线| 91久久精品无码一区二区| 中文字幕影音先锋| 在线观看日韩高清av| 欧美亚洲国产精品久久| 自拍偷拍18p| 精品久久久久av| 视频一区二区三区在线观看| 精品一区二区三区在线观看国产| 色综合咪咪久久| 国产电影一区在线| 激情婷婷久久| 亚洲一区二区三区四区五区中文| 乡村艳史在线观看| 在线观看二区| 精品人妻少妇嫩草av无码| 一区二区三区亚洲| 免费久久久久久| 国产美女被遭强高潮免费网站| 夜夜躁日日躁狠狠久久88av| zzijzzij亚洲日本成熟少妇| 亚洲国产精品二十页| 亚洲成人av片| 成人精品国产一区二区4080| 久久亚洲精品人成综合网| 亚洲视频 中文字幕| 久久久精品人妻无码专区| 97久久视频| 女人十八毛片嫩草av| 欧美黑人一区二区| 中文字幕制服丝袜成人av| 国产无码精品在线播放| 免费人成视频在线播放| 亚洲国产日韩av| 欧美承认网站| 欧美色图在线播放| 97青娱国产盛宴精品视频| 精品人妻少妇嫩草av无码专区| 亚洲精品欧美| 一本久道久久综合狠狠爱亚洲精品| 亚洲一区二区三区四区五区六区| 成人信息集中地欧美| 97品白浆高清久久久久久| 国产精品久久久久久久天堂第1集|