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

时间:2022-07-12 18:57:55
[cpp] view plaincopy
  1. #include <iostream>  
  2.   
  3. using namespace std;  
  4.   
  5. class CSimple  
  6. {  
  7. public:  
  8.  //静态成员变量  
  9.  static const int sx = 0;  
  10.  //静态函数  
  11.  static void SF1()  
  12.  {  
  13.  }  
  14. public:  
  15.  //成员变量  
  16.  int x;  
  17. public:  
  18.  //成员函数  
  19.  void F1()  
  20.  {  
  21.   cout<<"I'm from CSimple::F1()"<<endl;  
  22.  }  
  23.  void F2()  
  24.  {  
  25.   cout<<"I'm from CSimple::F1()"<<endl;  
  26.  }  
  27. public:  
  28.  //构造函数,C++语法不允许获取构造函数和析构函数地址,要分析其地址,只能查看生产的汇编代码了。  
  29.  CSimple()  
  30.  {  
  31.  }  
  32.  //析构函数  
  33.  ~CSimple()  
  34.  {  
  35.  }  
  36. };  
  37.   
  38. typedef void (CSimple::*Func)();  
  39.   
  40. union  
  41. {  
  42.  Func f;  
  43.  void *addr;  
  44. }ut;  
  45.   
  46. int main(int argc, char** argv)  
  47. {  
  48.  cout<<"main()函数的地址是       :"<<std::hex<<std::showbase<<main<<endl;  
  49.   
  50.  ut.f = &CSimple::F1;  
  51.  cout<<"成员函数F1()的地址是     :"<<std::hex<<std::showbase<<ut.addr<<endl;  
  52.  ut.f = &CSimple::F2;  
  53.  cout<<"成员函数F2()的地址是     :"<<std::hex<<std::showbase<<ut.addr<<endl;  
  54.   
  55.  cout<<"静态成员函数SF1()的地址是:"<<std::hex<<std::showbase<<CSimple::SF1<<endl;  
  56.  cout<<"静态成员变量sx的地址是   :"<<std::hex<<std::showbase<<&CSimple::sx<<endl;  
  57.   
  58.  cout<<"CSimple类型实例的大小    :"<<sizeof(CSimple)<<endl;  
  59.  CSimple* pObj = new CSimple();  
  60.  cout<<"对象指针变量的地址是     :"<<std::hex<<std::showbase<<&pObj<<endl;  
  61.  cout<<"新建对象的地址是         :"<<std::hex<<std::showbase<<pObj<<endl;  
  62.  cout<<"成员变量的地址是         :"<<std::hex<<std::showbase<<&pObj->x<<endl;  
  63.  //CSimple *p = new CSimple();  
  64.  //(p->*f)();  
  65.  delete pObj;  
  66.  cin>>argc;  
  67.  return 0;  
  68. }  

 

运行结果:

 

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

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