对象管理模型

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指针的存在,可以隐藏调用者对象。

 

posted @ 2016-10-17 14:24  e-data  阅读(104)  评论(0)    收藏  举报