C++ this指针
Posted LC编程开发者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ this指针相关的知识,希望对你有一定的参考价值。
this指针
this指针介绍
经过前面的学习,我们理解了这样一个问题:在一个类中定义的成员函数,那么,成员函数不是属于类定义的某一个对象,而是属于该类。例如,定义了一个student类,然后,定义N个student类对象,那么,这个N个student类对象的成员变量是独立分开。但是,成员函数只有一份,就是属于student类的那一份成员函数。测试例子如下:
程序运行结果如下:
此时,我们就有一个疑问:定义了stud1, stud2, stud3这样的3个student类对象。这3个student类对象,共享一份成员函数,就是共享void print() 函数代码。
那么,调用stud3.print()函数的时候,在print()函数中,怎么样知道是输出stud3对象的name成员?为何不会输出stud1等其他对象的成员?
要解决这个疑问,我们就需要知道C++的一个重要概念:this指针对象。
C++类定义的每一个对象,在对象的内部,都定义了一个this指针对象,它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。
例如,定义了stud3对象的时候,在stud3对象内部,有一个this指针对象,这个this指针对象指向当前的stud3对象。那么,当调用stud3.print()函数的时候,系统默认把stud3对象的this指针对象,作为参数,传递给print()函数。例如:
stud3.print(this);
此时,在print()函数中访问对象的成员,例如:
void print()
cout << "name = " << name << endl;
cout << "addr = " << addr << endl;
cout << "number = " << number << endl;
那么,访问name, addr, number成员的时候,系统是通过this对象来访问,等效于:
void print()
cout << "name = " << this->name << endl;
cout << "addr = " << this->addr << endl;
cout << "number = " << this->number << endl;
那么,由于this指针对象是指向stud3对象,所以,函数的调用等效于:
void print()
cout << "name = " << stud3.name << endl;
cout << "addr = " << stud3.addr << endl;
cout << "number = " << stud3.number << endl;
最终,在stud3.print()函数中,输出的name, addr, number成员,就是stud3对象的成员。这一切,都是通过this指针对象来操作完成。而且,this指针对象是系统默认定义,在每一个C++类对象中,都有一个this指针对象,指向对象自己。
那么,在对象的成员函数中,访问对象的成员变量或成员函数时,默认通过对象的this指针来访问成员变量和成员函数。
韦凯峰 Linux C/C++ 程序设计教程,Linux 系统编程,Openwrt 系统开发,微信:13926572996,QQ:1523520001,博客:www.mylinux.vip
以上是关于C++ this指针的主要内容,如果未能解决你的问题,请参考以下文章