C++ this指针显式使用
Posted LC编程开发者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ this指针显式使用相关的知识,希望对你有一定的参考价值。
this指针显式使用
上面我们介绍了this指针对象的定义。知道在对象的成员函数中,是通过this指针对象来访问成员变量和成员函数。
默认情况下,this指针是隐式使用的,它是作为参数被传递给成员函数的。例如,有student类的成员函数print()的定义如下:
void print(){
cout << "name = " << name << endl;
cout << "addr = " << addr << endl;
cout << "number = " << number << endl;
}
C++编译器把它处理成:
void print(student* this){
cout << "name = " << this->name << endl;
cout << "addr = " << this->addr << endl;
cout << "number = " << this->number << endl;
}
就是在成员函数的形参列表中增加一个 this 指针,在调用成员函数 stud3.print() 时,实际上是用以下方式调用:
stud3.print(&stud3);
此时,将stud3对象的地址传给形参this指针,然后,按this的指向去引用各成员。
需要说明:这些都是编译系统自动实现的,开发者不必在形参中增加this指针,也不必将对象stud3的地址传给this指针。上面是分析过程,只是为了使读者理解this指针的作用和实现的机理。
那么,this指针对象传递到对象的成员函数之后,可以显式使用this指针对象。可以通过this指针对象访问变量和函数。例如:
void print(){
cout << "name = " << this->name << endl;
cout << "addr = " << this->addr << endl;
cout << "number = " << this->number << endl;
}
此时,通过this指针来访问name成员变量。
我们知道this指针是一个指针,那么,可以通过指针降级运算符*来操作this指针,还原成它所指向的对象。例如 *this 就表示 this 指针所指向的对象。如下是一个测试例子:
程序运行结果如下:
可以看到,在print()函数中,可以显式通过this指针访问它所指向的对象。也可以使用指针降级运算符*来操作,把它还原为this指针所指向的对象。
所以,执行 stud1.print() 函数调用,相当于:
stud1.print(&stud1);
此时,在print()函数中的this指针,就是指向stud1对象。*this就是表示stud1对象。
注意,使用指针降级运算符*来操作this指针,访问this所指向对象的成员函数或成员变量时,*this 两侧的括号不能省略,不能写成 *this.name。因为,成员运算符“.”的优先级高于运算符“*”,因此,*this. name就相当于 *(this. name),而 this. name是不合法的,编译出错。
韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip
以上是关于C++ this指针显式使用的主要内容,如果未能解决你的问题,请参考以下文章
C++:对象和类|| this指针对象数组类作用域抽象数据类型章末总结