对象管理模型
c++编译器如何完成面向对象理论到计算机程序的转化的?
类:属性+方法的封装---->程序:数据段+代码段
成员变量:
普通成员变量,存储于对象中
静态成员变量,存储于全局静态存储区
成员函数:存储于代码段
既然成员函数和成员变量不在分配的空间的同一处,那么成员函数怎么访问到指定对象的成员变量呢?
class A { public: int fun() { return b1; } private: int b1; }; void main() { A a,b,c,d; a.fun(); }
a.fun()函数调用的过程,编译器会创建一个新的指针,来指明fun函数返回的到底是哪一个对象的成员变量——b1:
A* const this = &a; int fun(this) { return this->b1; }
所以,a.fun()的实质就是,对象创建this指针,并把对象地址传递给this指针,它指向当前的对象(所以this指针是在创建对象之后创建的,但不占对象空间),然后把this传递进函数,从而知道了对象的成员变量的值的。(因为代码段与对象的成员变量分配位置不在一起,所以要关联起来,这就靠this指针了)。
c++中普通成员函数都包含一个this指针。静态成员函数、成员变量都属于类,静态成员函数没有this指针。(区别静态成员函数和普通成员函数)
实例方法——成员函数;类方法——静态成员函数
全局函数与类成员函数的比较:成员函数由于this指针的存在,可以隐藏调用者对象。
内在的趣味,表面的繁琐

浙公网安备 33010602011771号