对于类中的成员函数,所有对象都访问的是同一块空间
但是到这里可能就会疑问了,那这不是和static静态函数一样了吗?为什么它有this指针呢?
注:这些操作都是编译器进行的管理,不同的编译器有不同的管理方式,我们只说其中的一种,帮助理解就行。
解释:
当我们使用对象,调用非静态成员函数,比如:stu.play(); 对于这段代码,当编译器编译的时候,编译器会给play()函数传递一个参数,就是调用对象的地址--&stu。
可以说,调用所有的非静态成员函数的时候,无论有没有参数,编译器都会给此函数再多传递一个参数,那就是调用函数的地址,作为this指针的值。
所以,即使成员函数只有一块存储空间,但是可以根据编译器传入调用对象的地址(也就是this的指针),来找到调用函数的数据,进行操作。
而对于静态函数,编译器就不会去添加这个地址的参数,所以是没有this指针的。
以上,就说明了为什么成员函数和静态函数其实都只有一块内存,但是为什么非静态成员函数可以使用this指针来指向对象。
以及为什么this指针会指向调用对象。
总结:
不同的编译器有不同的实现,上面只是其中一种,但是可以帮助理解。只是用于帮助理解,世界使用不需要考虑这些。