this指针

来源:互联网 发布:石狮优浮网络会所 编辑:程序博客网 时间:2024/06/06 09:25

一. this指针是什么?

this是指向实例化对象本身时候的一个指针,里面存储的是对象本身的地址,通过该地址可以访问内部的成员函数和成员变量。this指针的作用域在类的内部,自己声明一个类的时候,还不知道实例化对象的名字,所以用this来使用对象变量的自身。在非静态成员函数中,编译器在编译的时候加上this作为隐含形参,通过this来访问各个成员。

二.this指针的属性

(1)名称属性:标识符this表示。

(2)类型属性:类类型* const(类似于类引用的类型)

(3)值属性:表示当前调用该函数对象的首地址。

(4)作用域:this指针是编译器默认传给类中非静态函数的隐含形参,所以其作用域在非静态成员函数的函数体内。

(5)链接属性:在该类作用域中,不同类的非静态成员函数中,this这个指针变量的链接属性是内部的,但其所指对象是外部的,即this变量是不同的实体,但指向对象是同一个。

(6)存储类型:this指针是由编译器生成,当类的非静态成员函数的参数个数一定时,this指针存储在ecx寄存器中;若该函数参数个数未定(可变参数函数),存放在栈中。

通过一段代码来看this指针的作用

class A{public:    int get() const    {         return i;     }    void set(int x)    {         this->i = x;         cout << "this指针保存的内存地址为:" << this << endl;     }private:    int i;};int main(){    A a;    a.set(6);    cout << "对象a所在的内存地址为:" << &a << endl;    cout << "对象a所保存的值为:" << a.get() << endl;    cout << endl;    A b;    b.set(7);    cout << "对象b所在的内存地址为:" << &b << endl;    cout << "对象b所保存的值为:" << b.get() << endl;    return 0;}

运行结果 通过这个输出结果,我们可以看到,对象a的内存地址和this指针的一模一样,而当运行到对象b的时候,它的内存地址又和它所对应的this指针指向的内存地址一模一样了。这就说明了this指针变量记录的是当前对象的内存地址,即this指针指向当前的对象!

这里写图片描述

原创粉丝点击