第2个回答 2020-01-10
讲下this指针的作用,应该能帮助理解这个问题。
1:先讲下为什么非静态成员函数会有一个隐藏的this指针
如果对同一个类定义了n个对象,则有n组同样大小的空间以存放n个对象中的数据成员。但是,不同对象都调用同一个函数代码段。
那么,当不同对象的成员函数引用数据成员时,怎么能保证引用的是所指定的对象的数据成员呢?
这里就得this指针出马了
this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象。全局仅有一个this指针,当一个对象被创建时,this指针就存放指向对象数据的首地址。
2:静态成员函数没有this指针。
静态成员函数被所有的类对象所共享,就是说对同一个类定义了n个对象,这n个对象都调用同一个静态成员函数代码段(非静态成员函数也是被共享)。
静态成员变量也是被所有的类对象所共享,就是说对同一个类定义了n个对象,这n个对象都共享同一个静态变量的内存区
静态成员函数只能直接访问静态成员变量(静态成员函数也能通过对象间接访问非静态成员变量),
这说明什么?
说明我们在用静态成员函数直接访问静态成员变量的时候,根本不需要this指针来区分同一个类定义的n个对象,因为这n个对象都共享同一个静态成员变量内存区。
3:this指针的目的是区分同一个类的不同对象的数据区,而不是用于对象访问自己的成员函数。
只要是在类中定义的函数,不管是静态成员函数,还是非静态成员函数,都可以被对象访问。