C++Builder 2010深入TObject类
2016-02-18 15:16
274 查看
TObject是VCL类库中所有类的父类,它提供一些对象方法用于返回类信息和一些虚方法能够在其派生类重载。TObject的特殊地位是它具有某些特殊功能,例如,用户可以使用TObject数据类型代替VCL中任何数据类型,因为每个类都是从TObject类中派生出来的。这个功能的典型应用是,在C++Builder的组件的事件处理函数通常具备一个TObject类型的Sender参数,通过这个参数可以实现事件处理函数的重用。但是,TObject类型的变量或参数仅仅能够问TObject定义的方法和属性,例如,如果Sender参数的实际引用是一个TLabel对象,直接访问Sender->Caption将会出现错误。解决这个问题应该使用类的强制转换,在强制转换之前,还可以使用TObject类的ClassNameIs对象方法来检验参数的实际数据类型。例如下面的代码:
(1)ClassName方法。
声明:typedef TMetaClass * Tclass;
ClassName对象方法是通过TClass类引用实现的。
(2)ClassNameIs方法。
声明:typedef TMetaClass* TClass;
(3)ClassParent方法。
声明:typedefTMetaClass* TClass;
(4)Dispatch方法。
声明:virtual void __fastcall Dispatch(void *Message);
这是一个虚方法。该方法与实现Windows消息机制密切相关。该函数用于调用对象的消息处理方法,实际调用方法由Message参数指定的消息来决定。
(5)InheritsFrom方法。
声明:typedef TMetaClass* TClass;
(6)InstanceSize。
声明:typedef TMetaClass* TClass;
可以看到,TObject类具有很多优异特性。在多数时候,当需要创建一个新类,从TObject类继承会比直接创建效果好,这样做可以使所创建对象自动获得许多有用特性。
if (Sender->ClassNameIs("TLabel")) (TLabel*)Sender->Caption = "A Label";TObject类不具备属性,下面介绍TObject类几个有用的对象方法。
(1)ClassName方法。
声明:typedef TMetaClass * Tclass;
static ShortString __fastcall ClassName(TClass cls); ShortString __fastcall ClassName() {return ClassName(ClassType());}这个函数返回对象实例的类名。对于VCL中任何一个类,可以调用这个基类TObject的函数,将返回该类的实际类名。
ClassName对象方法是通过TClass类引用实现的。
(2)ClassNameIs方法。
声明:typedef TMetaClass* TClass;
static bool __fastcall ClassNameIs(TClass cls, const AnsiString String); bool __fastcall ClassNameIs(const AnsiString string) {return ClassNameIs(ClassType(),string);}这个函数用于判断对象的类型是否指定的类型。
(3)ClassParent方法。
声明:typedefTMetaClass* TClass;
static TClass __fastcall ClassParent(TClass cls); TClass __fastcall ClassParent() {return ClassParent(ClassType());}该方法返回对象的父类类型。
(4)Dispatch方法。
声明:virtual void __fastcall Dispatch(void *Message);
这是一个虚方法。该方法与实现Windows消息机制密切相关。该函数用于调用对象的消息处理方法,实际调用方法由Message参数指定的消息来决定。
(5)InheritsFrom方法。
声明:typedef TMetaClass* TClass;
static bool __fastcall InheritsFrom(TClass cls, TClass aClass); bool __fastcall InheritsFrom(TClass aClass) {return InheritsFrom(ClassType(),aClass);}此函数用于判断两个对象的继承关系。如果aClass指定的类是对象的基类,则返回true,否则返回false;
(6)InstanceSize。
声明:typedef TMetaClass* TClass;
static long __fastcall InstanceSize(TClass cls); long __fastcall InstanceSize(){return InstanceSize(ClassType());}该类返回对象运行时的大小。其效果等同于使用sizeof关键字。
可以看到,TObject类具有很多优异特性。在多数时候,当需要创建一个新类,从TObject类继承会比直接创建效果好,这样做可以使所创建对象自动获得许多有用特性。
相关文章推荐
- 单链表的简单应用
- c++ 根据指针类型获取原类型
- VC++的窗口句柄和窗口ID
- Cef概览
- Cef重要概念
- C语言二分查找法
- Cef应用资源布局
- Cef应用程序结构
- 多重继承《C++ primer 3th》
- neuq oj 1034: C基础-求同存异 C++
- [C/C++不常见语法特性]_[初级]_[左值-右值-lvalue-rvalue]
- [C/C++不常见语法特性]_[初级]_[左值-右值-lvalue-rvalue]
- [群150178878]nRF51822学习笔记–硬件外设篇【1】
- C++ vector 自定义类,重载==操作符,使用STL的find查找
- c++变量的作用域、生存期和可见性
- 关于c++虚函数及访问基类私有函数的实践及一些疑问
- C++中 #ifdef 和#endif的作用
- 实现一些简单的单链表
- test
- 用C/C++扩展你的PHP