工程保存的时候应该有一个自己的文件夹,而且要有一个有意义的名字,dpr文件管理所有的工程文件,dfm保存窗体的所有所有的信息。pas文件主要存放窗体事件的处理。
第四讲:delphi面向对象程序设计
类的声明:
type
类名=class
数据成员
成员函数或过程
end;
都集成自TObject,成员函数不允许在数据成员上定义。
类
type
student=class
name:string;
id:string;
score:real;
end;
记录类型
type
student=record;
name:string;
id:string;
score:real;
end;
有函数
type
student=class
name:string;
id:string;
score1:real;
score2:real;
procedure show();
function aver():real;
end;
{$R*.dfm}
procedure student.show();
begin
showmessage(name);
end;
function student.aver():real;
result:=(score1+score2)/2;
end;
对象的使用
var
对象名:类名;
对象声明后,并不能直接使用,必须 先创建对象。
创建对象
格式:
对象名.Create;
对象使用结束后,释放对象
释放对象格式:
对象名.destory;
对象名.free;
2、访问对象成员
格式:
对象名.成员;
注:访问对象之前,必须先创建对象。
3、类成员的访问权限
private 私有
只有该类的内部成员和本大院文件能够访问
protected 保护
之后累的内部成员和派生类可以访问
public 共有
类外部或内部都能够访问
注:在默认的情况下,类中没有访问修饰符,默认为 public
构造函数和析构函数
注意程序的内存泄露点的检查。
通过类声明了一个对象后,系统并没有创建该对象,只是定义了一个该对象的指针。我们需要构造该类的对象。
构造函数:create构造函数。是有类自动生成的一个默认的create函数,也可以通过首先create构造函数重载它。构造函数是一个特殊函数,用constructor标识,执行create构造函数之后,对象才再在内存中分配空间,创建对象。
析构函数:destory析构函数。自定义标识符:destructor.
继承
在已有类的基础上定义新的类。同时增加或重新定义数据和方法。
派生类:由类的基础上构造的新类。
type
派生类=class(基类)
end;
注意派生类和基类交流时的访问权限。
派生类的构造函数和析构函数
派生类中可以自己定义构造函数,也可以不显示地写(那么这个时候,自动调用基类的构造函数)如果需要可以用用inherited create在自己有构造函数时,仍然调用基类的构造函数。
析构函数也是一样的,如果自己有析构函数但仍然要基类的析构函数,用inherited destroy。
这一点十分重要:派生类释放时经常发生内存的泄露。
调用基础类和派生类的构造函数的顺序和你函数的调用顺序有关。
Delphi中的多态性
含有相同函数或过程名,而参数类型或 参数个数不同。用overload来重载。
重写从基类集成的函数或者过程,用override。
虚方法
基类用virtual,派生类override。