delphi的类及其对象
推荐 原创
©著作权归作者所有:来自51CTO博客作者ers456的原创作品,请联系作者获取转载授权,否则将追究法律责任
delphi的类及其对象
一 概述
其实类只是复杂的数据结构。这种数据结构可以有她的实体那就是对象。但要区分好类的静态数据与对象数据区别,类方法与对象方法的区别。前者是类所有对象共享,后者是对象特有。
二 类的声明及对象的定义
在delphi里有两类类,一种是继承自内建类,一种是自定义或继承自自定义类,这两者不仅声明的方式不一样,内存管理方面也不一样。
1 a
继承自内建类的类的声明
type myclass=class(内建类)
end;
或
type myclass=class//默认继承自 T OBJECT
end;
b
继承自内建类对象的构造:通过create方法返回一个指向对象实体的指针。
继承自内建类对象的析构 有两种方法 destroy 与free
destroy 只是把对象的头指针指向空,但实体的空间并没有被释放掉。free就可以完全把空间释放掉。
2自定义类的声明
type myclass=object(parentclass)
end;
或 完全自定义
type myclass=object
end;
自定义类的对象若不自定义构造函数则只是一般的变量,在编译时动态分配。
三 delphi对类成员的封装等级
1 private
只在该单元的该类中可见
2 protected
除在该单元的本类内可见外,其子类在也可见。//对象应该不可见
3 public
任何引用该类的地方都可见。包括该类的对象。
4 published
与public差不多,但在对象监视器内可见
5 automated
也与 public差不多
四 类的继承
1
父类被子类继承后再子类中有块区域与子类中的成员不再一个层次上,虽然子类可覆盖父类的成员,但其实父类中的成员是存在的。
2 方法的修饰符
默认情况下是static (此修饰符修饰的方法不可被子类覆盖),还有 virtual,dynamic(此修饰符修饰的方法可被子类覆盖)修饰符。
virtual,dynamic修饰符的区别:使用 virtual修饰符修饰的方法,当子类中的方法覆盖时,效率比较高,而dynamic修饰的方法占空间少。所以当父类中有大量需要子类重载,但重载的机会又比较小时用dynamic修饰。
3 override(覆盖)
覆盖时不仅要参数类型要一致,连返回值的也要一样。只是可以修改内部方法。父类中有virual修饰的方法但子类不一定要覆盖,且无论该子类有没有覆盖,该子类的子类都还可以再覆盖。
EG:override的例子
type myclass1=class
function myfunc;virtual;//说明该方法可被覆盖
end;
type myclass2=class(myclass1)
function myfunction;override; //覆盖了父类中同名方法
end;
四 overload 及 重定义
重定义是虽然父类中有被virual修饰的方法,在子类中还可以写个同名的方法,但不override
overload 是多态:在同一个类内,同名的几个函数,有不同的参数。以相应不同的要求。
myfunction(a:integer);overload;
myfunction(a:string);overload;
myfunction(a:float);overload;
五 类方法
delphi中不支持类成员但支持类函数,就是在方法前加class在不同的对象中就可共享次方法。
class function staticfun;//类方法
六 纯虚函数
拥有此方法的类必定有多态的事实,因为它的子类必须实现这个纯虚函数。
声明的方法
function myfunc:virtual;abtract;
上一篇:delphi的数据类型
下一篇:Delphi程序员笔试题目
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Delphi 类的类 class of 用法子类 功能类 父类 复用 数据
-
Delphi回调函数及其使用
Delphi回调函数及其使用 1 回调函数的概述 回调函数是这样一种机制:调用者在初
回调函数 被调用者 调用函数 事件模型 全局函数