浅谈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++的this指针
- 浅谈C++中的this指针
- 浅谈C++的this指针
- 浅谈 C++ 中的this 指针
- c++指针和引用的使用浅谈
- 浅析C++中的this指针
- C++的多态性实现机制剖析(即VC视频第3课this指针讲解)
- C++中的this指针
- [转]C++中this指针理解汇总以及问题和解答
- C++ Prime学习笔记之this指针
- 浅析C++中的this指针
- C++点滴——const/volatile不能用来修饰没有this指针的成员函数
- 浅析C++中的this指针(好文章,转过来)
- C++学习笔记---浅谈指针
- C++中this指针的用法.
- C++中this指针的用法
- 浅析C++中的this指针
- 浅谈一下this指针相关~~~~
- 浅析C++中的this指针
- C++中this指针的用法.