this指针
Posted 郭润
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了this指针相关的知识,希望对你有一定的参考价值。
this指针时一个隐含于每一个类的成员函数中的特殊指针(包括构造函数和析构函数),它用于指向正在被成员函数操作的对象。
this指针明确地指出了成员函数当前所操作的数据所属的对象。实际过程是,当通过一个对象调用成员函数时,系统先将该对象的地址赋给this指针,然后调用成员函数,成员函数对对象的数据成员进行操作时,就隐含使用了this指针。
this是一个指针变量,因此在成员函数中,可以使用*this来标识正在调用该函数的对象。
1、指向类的非静态成员的指针
指向对象成员的指针使用前也要先声明,再赋值,然后引用。注意,通过指向成员的指针也只能访问到共有成员。声明指针的语句形式为:
类型说明符 类名:: *指针名;//声明指向公有数据成员的指针
类型说明符 (类名::*指针名)(参数表);//声明指向公有函数成员的指针
声明了指向成员的指针之后,需要对其进行赋值,也就是要确定指向类的哪一个成员。对数据成员指针赋值的一般语法形式为:
指针名=&类名::数据成员名;
类的定义只确定了各个数据成员的类型、所占内存大小以及他们的相对位置,在定义时并不为数据成员分配具体的地址。因此上述赋值之后,只是说明了被赋值的指针时专门用于指向哪个数据成员的,同时在指针中存放该数据成员在类中的相对位置,当然通过这样的指针现在并不能访问什么。
由于类是通过对象而实例化的,在声明类的对象时才会为具体的对象分配内存空间,这时只要将对象在内存中的起始地址与成员指针中存放的相对偏移结合起来就可以访问到对象的数据成员了。访问数据成员时,这种结合可通过以下两种语法形式实现:
对象名. *类成员指针名
或对象指针名->*类成员指针名
成员函数指针在声明之后要用以下形式的语句对其赋值:
指针名=&类名::函数成员名;
c++标准规定不能将非静态成员函数名直接赋值给成员指针,必须要进行“&”运算。
类的成员函数虽然并不在每个对象中复制一个份拷贝,但是语法规定必须要通过对象来调用非静态成员函数,因此经过上述对成员函数指针赋值以后,还不能用指针直接调用成员函数,而是需要首先声明类的对象,然后用以下形式的语句利用指责你调用成员函数:
(对象名.*类成员指针名)(参数表)
或:(对象指针名->*类成员指针名)(参数表)
注意:成员函数指针的声明、赋值和使用过程中的返回值类型、函数参数表一定要互相匹配。
以上是关于this指针的主要内容,如果未能解决你的问题,请参考以下文章