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指针对象数组类作用域抽象数据类型章末总结

C++:对象和类|| this指针对象数组类作用域抽象数据类型章末总结

C++多态与this指针问题

C++类体系中this指针不能改变指向吗?

C++ 类设计总结回顾------this指针

C++ this 指针