浅析this指针
来源:互联网 发布:js代码混淆 编辑:程序博客网 时间:2024/05/29 11:11
1、this指针的含义及其用法:
在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为this,它是指向本类对象的一个指针,它的值是当前被调用的成员函数所在的对象的起始地址。
一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是会加上的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。
this指针记录每个对象的内存地址,然后通过运算符->访问该对象的成员。 因为this并不是一个常规变量,所以不能取得this的地址。
2、this指针的程序实例:
#include <iostream> using namespace std; class A { public: int get() const{return i;} void set(int x){this->i=x;cout<<"this指针保存的内存地址为:"<<this<<endl;} private: int i; }; int main() { A a; a.set(9); cout<<"对象a所在的内存地址为:"<<&a<<endl; cout<<"对象a所保存的值为:"<<a.get()<<endl; cout<<endl; A b; b.set(999); cout<<"对象b所在的内存地址为:"<<&b<<endl; cout<<"对象b所保存的值为:"<<b.get()<<endl; return 0; }
上面这个程序的输出结果表明,this指针变量记录的是当前对象的内存地址,即this指针指向当前的对象。
#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(){ cout<<"x="< }; 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调用该函数后,它的数据成员被调用并更新了值。
3、关于this指针的一些注意点:
在C++中,类和结构只有一个区别:类的成员默认是private,而结构是public。this是类的指针,如果换成结构,那this就是结构的指针了。
this指针是隐式的,是编译系统自动实现的,不可以显示的在形参中添加this指针,可以在成员函数内显示的使用this指针。
并不是所有的成员函数都有this指针,比如构造函数,静态成员函数就没有this指针。因为构造函数只在创建对象的时候调用一次,静态成员函数是属于类的不属于对象,所以没有this指针。
- 浅析 C++ this指针
- 浅析 this指针
- C++ this 指针 浅析
- C++ this 指针 浅析
- 浅析this指针
- 浅析this指针
- 浅析this指针(c++)
- C++浅析this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 浅析C++中的this指针
- 448. Find All Numbers Disappeared in an Array
- 同页面打开浮层窗口并加载来自action的信息
- CCF 相邻数对
- 微服务的前世今生
- Codeforces 782 Andryusha and Socks
- 浅析this指针
- hibernate的一级缓存和二级缓存机制
- R
- VS 2010 显示行号,调整字体
- c++之虚函数与多态
- 八大排序 C++
- jni返回byte[]
- python中PIL的安装——转自脚本之家
- coresync配置