C++程序运行时内存布局之----------简单类实例,成员变量,成员函数,静态成员变量,静态成员函数
转自:http://blog.csdn.net/smstong/article/details/6583214源代码如下:[cpp] viewplaincopy#include using namespace std; class CSimple { public: //静态成员变量
·
转自:http://blog.csdn.net/smstong/article/details/6583214
源代码如下:
- #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;
- }
运行结果:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)