C++面向对象模型初探

C++对象模型可以概括为以下两部分:
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++基础视频)

猜你喜欢

转载自blog.csdn.net/williamgavin/article/details/78945881