鱼C论坛

 找回密码
 立即注册
查看: 2689|回复: 0

[学习笔记] 030-C++之面向对象的内存模型

[复制链接]
发表于 2018-9-1 17:38:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1、面向对象理论到计算机程序的转换
C++中,在面向对象的程序设计中,将变量(属性)和函数(方法)集中定义在一起,用于描述现实生活中的类,但是在计算机的内部程序中这个是怎样来实现的呢?C语言中的内存四区模型不在适用了吗?C++又是如何管理,类、对象以及类和对象的关系的呢?
  1. class Test
  2. {
  3. private:
  4.         int m1;
  5.         static int m;
  6. public:
  7.         Test(int i)
  8.         {
  9.                 m1 = i;
  10.         }
  11.         int get()
  12.         {
  13.                 return m1;
  14.         }
  15.         static void print()
  16.         {
  17.                 cout << "this is a static class function!" << endl;
  18.         }
  19. };
  20.        
  21. void main()
  22. {
  23.         printf("%d\n", sizeof(Test));    // 4
  24.         system("pause");
  25. }
复制代码

上述程序可以发现,用该类在程序块中的内存只占4个字节。
结论:用类定义对象时,类中的静态成员是不会在分配内存的,(它放于全局区),类中的成员函数也是不会分配内存的,他们放于代码区,而只会给对象所独有的成员变量才会分配内存空间。
于是引出上面的问题:C++又是如何管理,类、对象以及类和对象的关系的呢?
C++中是用重命名函数名来解决的。
360截图20180829223153305.jpg
从上图来看,C++的类其底层也是C来实现的,只是对其成员函数做了一层包装。
而且可以看出对象调用类中定义的成员函数时,多了一个指针。该指针就是指向调用对象本身。即this指针。
this指针:指向对象自身的指针。python中为self.
2、总结
1.C++类对象中的成员变量和成员函数是分开存储的,C语言的内存四区模型仍然有效。
2.C++中类的普通成员函数都隐式包含一个指向当前对象的this指针。
3.静态成员函数、成员变量属于类

        注意:静态成员函数域普通成员函数的区别
        静态成员函数不包括指向的具体对象的指针
        普通成员函数包含一个指向具体对象的指针

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-22 08:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表