1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
#include "stdafx.h" #define DEBUG class CObject { public: virtual char* GetClassName() const{ return NULL;} }; class CMyClass : public CObject { public: static char lpszClassName[]; virtual char* GetClassName() const { return lpszClassName; } }; char CMyClass::lpszClassName[]="CMyClass1"; void main() { CObject *p; p=new CMyClass; printf("%s",p->GetClassName()); #ifdef DEBUG //cmd char e; scanf("%c",&e); #endif } 메크로 사용 #include "stdafx.h" #define DEBUG #define DECLARE_CLASSNAME(s) static char lpszClassName[] #define IMPLEMENT_CLASSNAME(s) char s##::lpszClassName[]=(#s) class CObject { public: virtual char* GetClassName() const{ return NULL;} }; class CMyClass : public CObject { public: //static char lpszClassName[]; DECLARE_CLASSNAME(CMyClass); virtual char* GetClassName() const { return lpszClassName; } }; //char CMyClass::lpszClassName[]="CMyClass1"; IMPLEMENT_CLASSNAME(CMyClass); void main() { CObject *p; p=new CMyClass; printf("%s",p->GetClassName()); #ifdef DEBUG //cmd char e; scanf("%c",&e); #endif } |