参考内容:
0)北京大学信息科学技术学院《程序设计实习》,郭伟老师&刘家瑛老师
目录
0)this指针的由来
下面这段直接复制过来的,来自参考1)
C++ 是在C语言的基础上发展而来的,第一个 C++ 的编译器实际上是将 C++ 程序翻译成C语言程序,然后再用C语言编译器进行编译。
C语言没有类的概念,只有结构,函数都是全局函数,没有成员函数。翻译时,将 class 翻译成 struct、对象翻译成结构变量是显而易见的,但是对类的成员函数应该如何翻译?对void SetPrice(int p);这样通过一个对象调用成员函数的语句,又该如何翻译呢?
C语言中只有全局函数,因此成员函数只能被翻译成全局函数;void SetPrice(int p);这样的语句也只能被翻译成普通的调用全局函数的语句。那如何让翻译后的全局函数还能作用在 CCar 这个结构变量上呢?答案就是引入“this 指针”。
下面来看一段 C++ 程序到C 程序的翻译。
可见,原本只有一个参数的void SetPrice(int p);被翻译到C中全局函数,多了一个结构体指针this,通过this访问成员变量,由此引出this指针的作用
1)this指针的作用
为进一步理解this指针的作用,再看两个例子
考虑this指针为空
左边的程序因为有指针这个对象,右边因为指针为空,不能通过空指针访问对象成员
同理:
静态成员函数中不能使用 this 指针!因为静态成员函数并不具体作用与某个对象!因此,静态成员函数的真实的参数的个数,就是程序中写出的参数个数!