目录
前言
前面我们介绍了类和对象的基本概念和使用方法,下面我们将进一步对内核对象的其他方面进行交流和讨论,其中包括我们下面要讲的自引用指针this,通过对字引用指针字this的了解,
this指针初识
我们将进一步理解类和对象的使用方法和作用,当一个类他有若干个对象被定义后,系统就会为每一个对象,分配他们相应的存储空间,但是一个类包含的数据成一个成员,函数就要分别为这两个代码分配储存空间,按照一般的思路,如果一个类定义了三个对象,那么就应该分别为这三个对象的数据成员和成员函数的代码分配相应的储存空间,但是事实上确是给对象赋值的时候,就是给对象的数据成员赋值,但是不同对象的存储单元中所放的数据值通常来说就是不相同的,但是不同对象的函数代码又是相同的,所以说不管调用哪一个对象的成员函数其实调用的就是一模一样的代码,
this指针作用
所以C加加的编译系统就用了一段空间来存放这个相同的函数代码段,这就完美的解决这个问题,因为在每个对象乘以函数构造的时候都会去调用这个共用的函数代码,因此每个对象的存储空间都只是该对象数据成员所占用的储存空间,但是不包括成因函数代码所占用的空间 ,下面我们就来看一个栗子:
#include <iostream> #include <string> using namespace std; class A { public: A(int a, int s); void show_score(); private: int age, score; }; A::A(int a, int s) { age = a; score = s; } void A::show_score() { cout << "this 指针值:" << this << "期末成绩:" << this->score << endl; } int main() { A a(18, 100); // 创建对象 A b(19, 99); A c(20, 98); a.show_score(); b.show_score(); c.show_score(); return 0; }
输出结果:
this 指针值:0000002A26BDFCC8期末成绩:100
this 指针值:0000002A26BDFCE8期末成绩:99
this 指针值:0000002A26BDFD08期末成绩:98
小结
上面这个例子中,是C++为成员函数提供了一个名字为this的指针,而且这个指针称为自引用指针,就是说每当创建一个新的对象的时候,系统就会默认把this指针初始化,并自动指向对象所以说每当调用一个成员函数时。系统就会自动把this指针当做一个隐含的参数,传给该函数