this指针
this简介
this是指向类对象的常量指针,不允许改变this中保存的地址。
它表示一种类型,如int。用这个类型声明一个变量,如int x,maclass my等。my的this就是指向my的指针。this的类型是maclass*,*this是一个maclass类型的变量。
This指针的隐含作用
作用域是在类内部。当类的非静态成员函数访问类的非静态成员的时候。编译器会自动将对象本身的地址作为一个隐含参数传递给函数。它作为类非静态成员函数的隐含形参(第一个,T * const this),*任何对类成员的直接访问都被看成this的隐式使用*。
类的this指针有以下特点
1)this在成员函数的开始前构造,在成员函数的结束后清除。
2)对类大小的影响:一个对象的this指针并不是对象本身的一部分。不会影响sizeof(对象)的结果
3)友元函数没有 this 指针,因为友元不是类的成员
This指针的使用
在类的非静态成员函数中返回类对象本身的时候,直接使用return *this。
当参数与成员变量名相同时,如this->n = n(不能写成n=n)。
#include<iostream>
class Point
{
int x, y;
public:
Point(int a, int b) { x=a; y=b;}
void MovePoint(int a, int b){ x+=a; y+=b;}
void print(){std::cout<<"x="<<x<<"y="<<y<<std::endl;}
};
void main( )
{
Point point1( 10,10);
point1.MovePoint(2,2);
point1.print( );
}
//当对象point1调用MovePoint(2,2)函数时,即将point1对象的地址传递给了this指针。
// MovePoint函数的原型应该是 void MovePoint( Point *this, int a, int b);
// 第一个参数是指向该类对象的一个指针,我们在定义成员函数时没看见是因为这个参数在类中是隐含的。
// 这样point1的地址传递给了this,所以在MovePoint函数中便显式的写成:
// void MovePoint(int a, int b) { this->x +=a; this-> y+= b;}