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;}
posted on 2020-07-20 20:15  JJ_S  阅读(244)  评论(0编辑  收藏  举报