- #include <iostream>
- using namespace std;
- class CSimple
- {
- public:
- //静态成员变量
- static const int sx = 0;
- //静态函数
- static void SF1()
- {
- }
- public:
- //成员变量
- int x;
- public:
- //成员函数
- void F1()
- {
- cout<<"I'm from CSimple::F1()"<<endl;
- }
- void F2()
- {
- cout<<"I'm from CSimple::F1()"<<endl;
- }
- public:
- //构造函数,C++语法不允许获取构造函数和析构函数地址,要分析其地址,只能查看生产的汇编代码了。
- CSimple()
- {
- }
- //析构函数
- ~CSimple()
- {
- }
- };
- typedef void (CSimple::*Func)();
- union
- {
- Func f;
- void *addr;
- }ut;
- int main(int argc, char** argv)
- {
- cout<<"main()函数的地址是 :"<<std::hex<<std::showbase<<main<<endl;
- ut.f = &CSimple::F1;
- cout<<"成员函数F1()的地址是 :"<<std::hex<<std::showbase<<ut.addr<<endl;
- ut.f = &CSimple::F2;
- cout<<"成员函数F2()的地址是 :"<<std::hex<<std::showbase<<ut.addr<<endl;
- cout<<"静态成员函数SF1()的地址是:"<<std::hex<<std::showbase<<CSimple::SF1<<endl;
- cout<<"静态成员变量sx的地址是 :"<<std::hex<<std::showbase<<&CSimple::sx<<endl;
- cout<<"CSimple类型实例的大小 :"<<sizeof(CSimple)<<endl;
- CSimple* pObj = new CSimple();
- cout<<"对象指针变量的地址是 :"<<std::hex<<std::showbase<<&pObj<<endl;
- cout<<"新建对象的地址是 :"<<std::hex<<std::showbase<<pObj<<endl;
- cout<<"成员变量的地址是 :"<<std::hex<<std::showbase<<&pObj->x<<endl;
- //CSimple *p = new CSimple();
- //(p->*f)();
- delete pObj;
- cin>>argc;
- return 0;
- }
运行结果: