浅谈C++中的this指针
来源:互联网 发布:淘宝上拍卖的房子 编辑:程序博客网 时间:2024/06/06 16:35
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++中的this指针
- [转帖]浅谈js中的this指针
- 浅谈C语言中的指针
- 浅谈js中的call,apply,bind方法中的this指针
- 浅谈this指针
- c++ this指针浅谈
- 浅谈this指针
- 浅谈this指针
- 详解C++中的this指针
- 浅谈C/C++中的指针和数组
- 浅谈C语言中的多级指针
- 浅谈js中的this
- 【C/C++】this指针
- 浅谈一下this指针相关~~~~
- 算法-找出缺失的整数
- cs231n:SVM线性分类器
- react-native 在sdk 目录下无法找到模拟器.
- RocketMQ
- Everything v1.4.1.796b
- 浅谈C++中的this指针
- 别样数据结构与算法学习(六)查找
- 迷の“良心”膜你赛总结*3
- springIOC源码解析(三)
- android常用utils
- Struts1环境搭建并演示一个小例子
- zurmo(五)-自定义语言
- JVM的Client VM 与 Server VM介绍
- 【leetcode】2.Add Two Numbers