delphi&oo 回顾

类就是角色,一个对象实例可能有多重角色。

类的核心是属性(数据/状态),区别不同类的正是类(私有)数据,否则没必要搞多个类,层次过重没有好处。

对象是类的实例。

<class name> = Class(<parent class name>)

。。。

end;

 

类声明中先声明数据成员,再声明类方法。

类方法中有2类特殊方法。

构造函数:在类实例创建时被执行。

形如 constructor Create(变量列表);

构造函数可以重载(overload),即可以有多个构造函数(不同的变量列表)。

析构函数:在类实例销毁时被执行。

destructor Destory(); //不可以再传变量进去了

析构函数可以重写,因为一个继承(inherience)的原因,特定的析构函数有时难免要被子类改写(override)。

继承父类的析构函数: inherited Destroy(); //放在析构函数的最后

 

除了包括普通的数据成员,类还有属性,允许外界以简单的方式对(普通的)数据成员进行读写操作。

property <Prop>: <type> read <read func> write <write func> default <default value>;

<Prop> := <value>;

 

但对于复杂的数据成员,属性有点力有不逮了。

 

类成员的可见性

private,

protected

public

published

 

子类可以增强父类成员的可见性,但不能降低其可见性。

 

一个类只有一个虚拟表,改类的所有对象都会通过这个虚拟表调用虚方法。

当某个类的对象创建时,编译器会为这个对象制定所属类的虚拟表或虚函数表(VMT)。虚拟表的地址存在对象地址内容的前4个字节中。

每个子类的虚函数表会完全继承父类的虚函数表(的实现),只是将覆盖的虚函数的地址改变了。VMT中的虚函数非常齐全,对每个虚函数入口的地址只需简单的VPTR+n操作就可得到。

除了VMT还有,DMT(动态函数表),实现的功能和VMT一样,只是VMT时间效率高,DMT空间效率高。

和静态方法相比,虚方法(方法后跟 virtual)意味着其地址在编译时是不固定的,而是在程序运行时通过动态查找而指定(如何查找?),又叫动态绑定或滞后绑定。

 

 

多态,其实就是为了增强处理数据的灵活性。通过基类指针或引用指向子类的对象,调用其虚方法实现的。

 

类运算符 as 像强制类型转换,只可向上。

is 判断是不是一个类或其子类的对象实例。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值