C程序运行时内存布局中,成员变量、成员函数、静态成员变量、静态成员函数如何构成一个完整的简单类实例?

2026-04-11 23:522阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计512个文字,预计阅读时间需要3分钟。

C程序运行时内存布局中,成员变量、成员函数、静态成员变量、静态成员函数如何构成一个完整的简单类实例?

cpp#include using namespace std;

int main() { cout << Hello, World!; return 0;}

[cpp] 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程序运行时内存布局中,成员变量、成员函数、静态成员变量、静态成员函数如何构成一个完整的简单类实例?

本文共计512个文字,预计阅读时间需要3分钟。

C程序运行时内存布局中,成员变量、成员函数、静态成员变量、静态成员函数如何构成一个完整的简单类实例?

cpp#include using namespace std;

int main() { cout << Hello, World!; return 0;}

[cpp] 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程序运行时内存布局中,成员变量、成员函数、静态成员变量、静态成员函数如何构成一个完整的简单类实例?