c++中 this指针详解
来源:互联网 发布:java怎么分割字符串 编辑:程序博客网 时间:2024/05/16 15:37
this 是 c++中的一个关键字,也是一个常量指针,指向当前对象,也就是当前对象的首地址。通过this指针,可以访问当前对象的成员变量和成员函数。
【特性】
1. this指针的类型是 类类型* const
2. this指针并不是对象本身的一部分,不会影响sizeof的结果
3. this的作用域在类成员函数的内部
4. this指针是类成员函数的第一个默认隐含参数,编译器自动维护传递
5. 只有在类的非静态成员函数中才可以使用this指针
所谓的当前对象,就是正在使用的对象,例如stu.print(); stu 就是当前对象,系统正在访问stu的成员函数print()
假设this指向stu对象 那么 下面的pStu 的值就和this的值相同
Student stu;Student *const pStu = &stu;
下面演示一个完整的例子
#include <iostream>using namespace std;class Student{public:void setName(char *);void setAge(int );void print();private:char *name;int age;double score;};void Student::setName(char* name){this->name = name;}void Student::setAge(int age){this->age = age;}void Student::print(){cout << this->name << ":" << this->age << "岁" <<endl;}int main(){Student stu1;stu1.setName("小王");stu1.setAge(18);stu1.print();Student stu2;stu2.setName("李元霸");stu2.setAge(16);stu2.print();return 0;}
输出结果:
小王:18岁
李元霸:16岁
对象和普通的变量类似,每个对象都占用若干字节的内存,用来保存成员变量的值,
不同对象占用的内存互不重叠。
上面的例子中创建stu1时,this指针就指向了stu1所在内存块的首字节,创建stu2时,this指针就指向了stu所在内存块的首字节...
现在添加下面的函数 用来输出this的值,验证this的值与 对象的地址是否相同:
void Student::printAddr(){ cout << this << endl;}
接着在main函数中输出创建对象并调用函数:
int main(){Student stu1;Student *pStu1 = &stu1;stu1.printAddr();cout << pStu1 << endl;Student stu2;Student *pStu2 = &stu2;stu2.printAddr();cout << pStu2 << endl;return 0;}
输出结果:
0030FBEC
0030FBEC
0030FBC8
0030FBC8
输出结果显示了this确实指向了当前对象的首地址,而且对于不同的对象,this的值也不一样。
切记:
~~this 是常量指针,它的值不能被修改
~~this 只能在成员函数内部使用
~~只有对象被创建后this才有意义,因此不能再static成员函数中使用
实际上,this指针是作为函数的参数隐式传递的,它并不出现在参数列表中,调用成员函数时,系统(编译器)自动获取当前对象的地址,并赋给this,完成参数的传递。
this作为隐式参数,本质上是成员函数的局部变量,不占用对象的内存,只有在发生成员函数调用时才会给this赋值,函数调用结束,this被销毁。
在《C++函数编译原理和成员函数的实现》讲到,成员函数最终被编译成与对象无关的普通函数,除了成员变量,会丢失所有信息,所以在编译时要在成员函数中添加一个额外的参数,把当前对象的首地址传入,以此来关联成员函数和成员变量。
这个额外的参数也就是this ,它是成员函数和成员变量之间的桥梁。
- C++this指针详解
- C++this指针详解
- C++this 指针用法详解
- C++中this指针详解
- c++中 this指针详解
- C++中this指针详解
- 详解C++中的this指针
- C++中this指针的用法详解
- C++中this指针的用法详解
- C++中this指针的用法详解
- C++中this指针的用法详解
- C++中this指针的用法详解
- C++中this指针的用法详解
- C++中this指针的用法详解
- C++中this指针的用法详解
- C++中this指针的用法详解
- C++中this指针用法详解
- C++中this指针的用法详解
- verilog 有符号数
- java socket编程
- DIV+CSS规范命名集合
- 深度学习检测方法梳理
- Android 拖拽
- c++中 this指针详解
- LeetCode --- 89. Gray Code
- 在Linux操作系统中,eclipse建立快捷方式
- 关于AppStore 上架审核的坑(不定期更新)原创+转载
- Struts2的简单使用
- 20个编写现代CSS代码的建议
- 带您深入了解MYSQL Cast函数
- iOS开发:富文本AttributedString
- 决策树学习