`
pascal4123
  • 浏览: 114631 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

delphi&oo 回顾

    博客分类:
  • GP
 
阅读更多

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

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

对象是类的实例。

<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 判断是不是一个类或其子类的对象实例。

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics