C++对象管理模型
2015-12-13 19:04
274 查看
1.基础知识
C++中的class从面向对象理论出发,将变量(属性)和函数(方法)集中定义在一起,用于描述现实世界中的类。从计算机的角度,程序依然由数据段和代码段构成。C++编译器如何完成面向对象理论到计算机程序的转化?换句话说,C++编译器是如何管理类、对象、类和对象之间的关系?
2.用内存四区解释C++属性和方法
2.1C++对象中的成员变量和成员函数是分开存储的
成员变量:- 普通成员变量:存储于
对象中,与struct变量有相同的内存布局和字节对其方式
- 静态成员变量:存储与
全局数据区中
成员函数:存储与
代码段中
2.2C++编译器对普通成员函数的内部处理
提问:很多对象公用一段代码,代码是如何区分具体的对象是谁?class Person{ private: int mAge; public: Person(int age){ mAge = age; } int getAge(){ return mAge; } static void prinf(){ prinf("Person static function do something..."); } }; Person p(20); p.getAge(); Person::prinf();
比如上面的代码中,getAge()方法如何区分是那个对象调用了自己?
原来C++编译器会将上述代码转成如下形式:
struct Person{ int mAge; }; void Person_initialize(Person *p, int age){ p->mAge = age; } int Person_getMAge(Person *p){ return p->mAge; } void Person_prinf(){ prinf("Person static function do something..."); } Person p; Person_initialize(&p, 20); Person_getMAge(&p); Person_prinf();
其实说到底,是C++编译器帮我们做了一层面向对象的封装
3.总结
C++类对象中的成员变量和成员函数是分开存储的。C语言中的内存四区模型在C++中仍然有效C++中类的普通成员函数都隐式包含一个指向当前对象的this指针
静态成员函数与普通成员函数的区别:
静态成员函数不包含指向具体对象的指针
普通成员函数包含一个指向具体对象的指针
静态成员函数中不能调用普通成员函数和使用普通成员变量,也就是静态只能使用静态
普通成员函数中可以调用静态成员函数和使用静态成员变量
相关文章推荐
- c/c++ 宏函数的应用
- C语言
- android C++环境搭建
- c语言知识点总结
- POJ1753——Robot Motion
- C++项目中的extern "C" {}
- C++强转
- C/C++编译和链接过程详解 (重定向表,导出符号表,未解决符号表)
- 并查集uva1160 - X-Plosives
- c++生成球的顶点和面索引CreateSphere
- Windows下pip安装包报错:Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat
- 使用 C++11 让程序更简洁、更现代
- CPP 6th——类(8)
- 设计模式系列(十二)模板方法模式(Template Method Pattern)
- Visitor(访问者)设计模式
- 分享 C++命名空间的解释
- C++阻止拷贝
- c++异常处理 try catch
- 认为C/C++很难理解、找工作面试笔试,快看看这本书!
- What Is Google C++ Mocking Framework?