DELPHI中的面向对象DELPHI中的面向对象DELPHI中的面向对象类:具有相同属性和行为的一组对象的共同描述,是对相似对象建立的模板。对象:由类定义的对象,具体的是一个实体。注:DELPHI中的类,类似于记录,类和记录不同在于,类有行为等区别。类与对象类的声明对象的使用DELPHI中的面向对象DELPHI中的面向对象类的定义格式:type类名=class数据成员成员函数或过程end;注:成员函数或过程不允许在数据成员之上定义。类与对象例:type//该类中只含有数据成员。xuesheng=classxm:string;xh:string;cj:real;end;比较记录类型typexuesheng=recordxm:string;xh:string;cj:real;end;类与对象DELPHI中的面向对象类与对象implementationtype//该类中只含有数据成员。xuesheng=class//定义xuesheng类xm:string;xh:string;cj1:real;cj2:real;procedureshow();//声明成员过程functionaver():real;//声明成员函数end;{$R*.dfm}procedurexuesheng.show();//定义类成员过程beginshowmessage(xm);end;functionxuesheng.aver():real;//定义类成员函数beginaver:=(cj1+cj2)/2;end;DELPHI中的面向对象对象的使用1、对象的声明对象的声明方式与变量相同var对象名:类名;对象声明以后,并不能直接使用,必须先创建对象。创建对象:格式对象名.Create;对象使用结束后,释放对象释放对象格式:对象名.Destroy对象名.free类与对象DELPHI中的面向对象例:我们已定义好xuesheng类procedureTForm1.Button1Click(Sender:TObject);varxs:xuesheng;Beginxs:=xuesheng.Create;//创建对象xs.Destroy;//释放对象end;DELPHI中的面向对象对象的使用2、访问对象成员格式:对象名.成员注:访问对象之前,必须先创建对象。类与对象DELPHI中的面向对象例:我们已定义好xuesheng类procedureTForm1.Button1Click(Sender:TObject);varxs:xuesheng;beginxs:=xuesheng.Create;xs.cj1:=90.5;//访问数据成员xs.cj2:=85;xs.show();//访问成员函数或过程xs.Destroy;end;DELPHI中的面向对象类成员中,有三中访问权限,其标识符分别是Private私有只有该类的内部成员,和本单元文件能够访问Protected保护只有该类的内部成员和它的派生类能够访问(以后将学习到)Public共有类外部或内部都能访问注:在默认情况下,类中没有加任何标识符的成员,为共有成员。类成员的访问权限DELPHI中的面向对象类定义的完整格式:type类名=classprivate私有数据成员、成员函数或过程protected保护数据成员、成员函数或过程public公共数据成员、成员函数或过程end;类成员的访问权限DELPHI中的面向对象将类放入同一文件DELPHI中的面向对象例:typeyuanxing=classprivatebanjing:integer;yanse:string;publicproceduresetbanjing(i:integer);proceduresetyanse(st:string);functiongetbanjing():integer;functiongetyanse():string;end;procedureyuanxing.setbanjing(i:integer);beginbanjing:=i;end;procedureyuanxing.setyanse(st:string);beginyanse:=st;end;functionyuanxing.getbanjing():integer;begingetbanjing:=banjing;end;functionyuanxing.getyanse():string;begingetyanse:=yanse;end;将类放入一个单元文件中。例:我们已在本单元定义好yuanxing类procedureTForm1.Button1Click(Sender:TObject);varyuan:yuanxing;beginyuan:=yuanxing.Create;yuan.setbanjing(10);yuan.setyanse('红色');showmessage(yuan.yanse);//正确,该类声明在本单元中yuan.Destroy;end;DELPHI中的面向对象implementationtypeyuanxing=classprivatebanjing:integer;yanse:string;publicproceduresetbanjing(i:integer);proceduresetyanse(st:string);functiongetbanjing():integer;functiongetyanse():string;end;{$R*.dfm}procedureyuanxing.setbanjing(i:integer);beginbanjing:=i;end;procedureyuanxing.setyanse(st:string);beginyanse:=st;end;functionyuanxing.getbanjing():integer;begingetbanjing:=banjing;end;functionyuanxing.getyanse():string;begingetyanse:=yanse;end;procedureTForm1.Button1Click(Sender:TObject);varyuan:yuanxing;beginyuan:=yuanxing.Create;yuan.setbanjing(10);yuan.setyanse('红色');showmessage(yuan.yanse);yuan.Destroy;end;end.Unit1代码文件将类放入单独单元文件DELPHI语言基础unitUnit2;//放入单独单元文件interfacetypeyuanxing=classprivatebanjing:integer;yanse:string;publicproceduresetbanjing(i:integer);proceduresetyanse(st:string);functiongetbanjing():integer;functiongetyanse():string;end;implementationprocedureyuanxing.setbanjing(i:integer);beginbanjing:=i;end;procedureyuanxing.setyanse(st:string);beginyanse:=st;end;functionyuanxing.getbanjing():integer;begingetbanjing:=banjing;end;functionyuanxing.getyanse():string;begingetyanse:=yanse;end;end.unitUnit1;interfacevarForm1:TForm1;implementationusesunit2;//引用类文件{$R*.dfm}procedureTForm1.Button1Click(Sender:TObject);varyuan:yuanxing;beginyuan:=yuanxing.Create;yuan.setbanjing(10);yuan.setyanse('红色');showmessage(yuan.yanse);//错误yuan.Destroy;end;end.….构造函数析构函数DELPHI中的面向对象构造函数析构函数由类说明了一个对象以后,系统并没有实际创建该类的对象,只是定义了一个该对象的指针。为此我们需要构造该类的对象。构造函数:create构造函数,是由类自动生成一个默认的create函数,也可以通过手写create构造函数重载它。构造函授是一个特殊函数,用constructor标识。执行create构造函数之后,对象才再内存中分配空间,创建对象。析构函数:destroy析构函数,类自动默认一个destroy函数,也可以通过手写destroy构造函数重载它。和构造函数相反,当对象不再使用时,用于释放资源。标识符也是destructor。构造函数析构函数DELPHI中的面向对象DELPHI中的面向对象构造函数析构函数编写程序时,当对象不再使用,必须将其释放。构造函数析构函数typeyuanxing=classprivatebanjing:integer;yanse:string;publicconstructorcreate();//声明构造函数proceduresetbanjing(i:integer);proceduresetyanse(st:string);functiongetbanjing():integer;functiongetyanse():string;destructorDestroy;//声明析构函数end;DELPHI中的面向对象constructoryuanxing.create;//构造函数beginshowmessage('构造函数!');end;destructoryuanxing.destroy;//析构函数beginshowmessage('析构函数!');end;procedureTForm1.Button1Click(Sender:TObject);vary:yuanxing;beginy:=yuanxing.create;//创建对象y.Destroy;//释放对象end;DELPHI中的面向对象DELPHI中的面向对象继承DELPHI中的面向对象继承:在已经存在的类的基础上构造新的类,同时增加或重新定义数据和方法。派生类:由类的基础上构造的新的类称为派生类。派生类的定义格式:type派生类=class(基类)相关数据end;继承DELPHI中的面向对象基类:Typejl=classpublic{public数据}private{private数据}protected{protected数据}end;继承派生类:Typepsl=class(jl)//继承lj类end;由派生类创建的对象,能够访问基类里面的public?private?protected?DELPHI中的面向对象继承派生类创建的对象,能够访问基类里面的public?private?protected?1、public:派生类可以直接访问基类中的public数据。2、protected:基础类中的protected数据,将成为派生类中的private3、private:基础类中的的private不允许在派生类中访问。但也有例外情况。若基类和派生类在同一个单元文件中,则派生类可以访问,若在不同的单元文件中则不允许访问。DELPHI中的面向对象基类与派生类在同一单元文件中的情况unitjl;//基类和派生类在同一个单元文件中interfaceTypejla=class//声明基类privateyanse:string;protectedchangdu:integer;end;Typepsla=class(jla)//声明派生类(继承于jla