首页 > 其他 > 详细

this指针

时间:2020-07-20 22:06:52      阅读:70      评论:0      收藏:0      [点我收藏+]

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;}

this指针

原文:https://www.cnblogs.com/vivian187/p/13347452.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!