您的位置:首页 > 编程语言 > C语言/C++

C++程序运行时内存布局之----------简单类实例,成员变量,成员函数,静态成员变量,静态成员函数

2013-03-30 15:28 891 查看
[cpp] view
plaincopy

#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;  

}  

 

运行结果:

 





 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐