C++对象模型可以概括为以下两部分:
1> 语言中直接支持面向对象程序设计的部分, 主要设计如构造函数、析构函数、虚函数、继承、多态等等。
2> 对于各种支持的底层实现机制
基础知识:
c++的类从面向对象理论出发, 将变量(属性)和函数(方法)集中定义在一起, 用于描述现实世界中
的类。从计算机的角度出发, 程序依然由数据和代码段构成。
C++编译器是如何完成面向对象到计算机程序的转化?
换句话说, C++编译器是如何管理类、对象、类和对象的关系。
具体的说:具体对象调用类中的方法, 那么C++编译器是如何区分是那个具体的对象,调用这个方法
C++编译器对普通成员函数的内部处理
1> C++类对象中的成员变量和成员函数是分开存储的。
普通成员变量:存储于对象中, 与struct 变量有相同的内存布局和字节对齐方式。 // 栈区
静态成员变量:存储于全局数据区中。
普通成员函数:存储于代码段。
那么问题来了:很多对象共用一块代码? 代码是如何区分具体对象的呢?
源码: 注意理解
翻译成C语言
总结:
1> C++类对象中成员变量和成员函数是分开存储的, C语言中的内存四区依然有效
2> C++中类的普通成员函数都隐式包含一个指向当前对象的this指针。
3> 静态成员函数、成员变量都属于类。
静态成员函数与普通成员函数的区别:
静态成员函数不包含指向具体对象的指针
1> 语言中直接支持面向对象程序设计的部分, 主要设计如构造函数、析构函数、虚函数、继承、多态等等。
2> 对于各种支持的底层实现机制
基础知识:
c++的类从面向对象理论出发, 将变量(属性)和函数(方法)集中定义在一起, 用于描述现实世界中
的类。从计算机的角度出发, 程序依然由数据和代码段构成。
C++编译器是如何完成面向对象到计算机程序的转化?
换句话说, C++编译器是如何管理类、对象、类和对象的关系。
具体的说:具体对象调用类中的方法, 那么C++编译器是如何区分是那个具体的对象,调用这个方法
C++编译器对普通成员函数的内部处理
1> C++类对象中的成员变量和成员函数是分开存储的。
普通成员变量:存储于对象中, 与struct 变量有相同的内存布局和字节对齐方式。 // 栈区
静态成员变量:存储于全局数据区中。
普通成员函数:存储于代码段。
那么问题来了:很多对象共用一块代码? 代码是如何区分具体对象的呢?
源码: 注意理解
/* C++编译器是如何管理静态和非静态成员的? */ # include <iostream> using namespace std; class Text { private: int m1; public: Text(int i) { m1 = i; } int getI() { return m1; } static void printI() { cout << "This is calss text" << endl; } }; Text a(10); a.getI(); Text::printI();
翻译成C语言
struct Text { int m1; }; void Text_initialize(Text * pThis, int i) { pThis->m1 = i; } int Text_getI(Text * pThis) { return pThis->m1; } void Text_printI() { printf("This is class Text\n"); } Text a; Text_initialize(&a, 10); Text_getI(&a); Text_printI();
总结:
1> C++类对象中成员变量和成员函数是分开存储的, C语言中的内存四区依然有效
2> C++中类的普通成员函数都隐式包含一个指向当前对象的this指针。
3> 静态成员函数、成员变量都属于类。
静态成员函数与普通成员函数的区别:
静态成员函数不包含指向具体对象的指针
普通成员函数包含一个指向具体对象的指针
------------------------------------------------------------------------------------------------------
内容参考于:传智播客视频(video超适合自学的c++基础视频)