您的位置:首页 > 编程语言 > C语言/C++

浅谈C++中的this指针

2016-11-08 22:14 260 查看

this指针的引出

每个对象中的数据成员都分别占有存储空间,如果对同一个类定义了n个对象,则有n组同样大小的空间以存放n个对象中的数据成员。每个成员函数都有个特殊的指针——this指针。它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。

this指针的特性

1.this指针是隐式使用的,它是作为参数被传递给成员函数的。

2.this指针的类型 类类型* const。

3.this指针并不是对象本身的一部分,不影响sizeof的结果。

4.this的作用域在类成员函数的内部。

5.、this指针是类成员函数的第一个默认隐含参数,编译器自动维护传递,类编写者不能显式传递。

6.、只有在类的非静态成员函数中才可以使用this指针, 其它任何函数都不可以。

_thiscall调用约定

a、__thiscall只能够用在类的成员函数上,参数从右向左压栈。

b、如果参数个数确定,this指针通过ecx传递给被调用者;如果参数不确定,this指针在所有参数被压栈后压入堆栈。

c、对参数个数不定的,调用者清理堆栈,否则函数自己清理堆栈。

this指针测试##

this指针是存在与类的成员函数中,指向被调用函数所在的类实例的地址。根据以下程序来说明this指针:

include<iostream.h>
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(){ cout<<"x="<<x<<"y="<<y<<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;}

即可以知道,point1调用该函数后,也就是point1的数据成员被调用并更新了值。

即该函数过程可写成 point1.x+= a; point1. y + = b;

总结

this指针最大的作用就是它保存了当前对象的地址,并且应用指针的形式指向了当前的对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  指针 c语言