00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "gzBaseLibrary.h"
00025
00026 class MyBaseClass : public gzTypeInterface
00027 {
00028 public:
00029 GZ_DECLARE_TYPE_INTERFACE;
00030
00031 MyBaseClass():a(10){}
00032
00033 int a;
00034
00035 };
00036
00037
00038 class MyDerivedClass : public MyBaseClass
00039 {
00040 public:
00041
00042 GZ_DECLARE_TYPE_INTERFACE;
00043
00044 };
00045
00046 class MySecondDerivedClass : public MyBaseClass
00047 {
00048 public:
00049
00050 GZ_DECLARE_TYPE_INTERFACE;
00051
00052 };
00053
00054
00055 class MyVeryDerivedClass : public MyDerivedClass
00056 {
00057 public:
00058
00059 GZ_DECLARE_TYPE_INTERFACE;
00060
00061 };
00062
00063
00064
00065
00066
00067
00068
00069 GZ_DECLARE_TYPE_BASE(MyBaseClass,"MyBaseClass");
00070 GZ_DECLARE_TYPE_CHILD(MyBaseClass,MyDerivedClass,"MyDerivedClass");
00071 GZ_DECLARE_TYPE_CHILD(MyBaseClass,MySecondDerivedClass,"MySecondDerivedClass");
00072 GZ_DECLARE_TYPE_CHILD(MyDerivedClass,MyVeryDerivedClass,"MyVeryDerivedClass");
00073
00074 gzVoid printInfo(gzTypeInterface *pClass)
00075 {
00076
00077
00078 MyBaseClass *pMyBaseClass=NULL;
00079
00080 if(pClass->isOfType(MyBaseClass::getClassType()))
00081 {
00082 pMyBaseClass=(MyBaseClass *)pClass;
00083 }
00084
00085
00086
00087 pMyBaseClass=gzDynamic_Cast<MyBaseClass>(pClass);
00088
00089 if(pMyBaseClass)
00090 {
00091 GZMESSAGE(GZ_MESSAGE_NOTICE,"The instance is a '%s' type",pClass->getTypeName());
00092
00093 if(pMyBaseClass->isExactType(MyVeryDerivedClass::getClassType()))
00094 {
00095 GZMESSAGE(GZ_MESSAGE_NOTICE,"The instance is really a very very '%s' type",pClass->getTypeName());
00096 }
00097 }
00098
00099 }
00100
00101 int main(int argc , char *argv[] )
00102 {
00103 try
00104 {
00105
00106 MyDerivedClass *pDerivedClass=new MyDerivedClass;
00107
00108 printInfo(pDerivedClass);
00109
00110 delete pDerivedClass;
00111
00112
00113
00114 MyVeryDerivedClass *pVeryDerivedClass=new MyVeryDerivedClass;
00115
00116 printInfo(pVeryDerivedClass);
00117
00118 delete pVeryDerivedClass;
00119
00120 }
00121 catch(gzBaseError &error)
00122 {
00123 error.reportError();
00124 }
00125
00126 return 0;
00127 }
00128