成员变量和成员函数分开存储
在一个类当中,成员变量和成员函数是分开存储的,而每一个非静态成员函数的调用实际上只会生成一个函数实例,即多个类型的对象会共用一套函数代码
this指针
上面的那“一块代码”是如何区分自己是被哪一块函数调用的?这里C++引入了this指针来解决这一问题。this指针将指向被调用的成员函数所属的对象。
还是那一个经典的解释:当你走进了一间房子,但是这间房子的陈设和别的房子的是一模一样的,你对房子的陈设做了改变,那么你能知道你是对那一间房子做了改变吗?
这样的问题也发生在函数上。看下面的代码:
#include<iostream>
#include<string>
using namespace std;
class Student{
public:
void setName(string name)
{
name1 = name;
}
void showName()
{
cout<<name1<<endl;
}
private:
string name = "John";
};
int main()
{
Student s1;
Student s2;
s1.setName("Danny");
s2.setName("Cindy");
s1.showName();
s2.showName();
return 0;
}
上述代码的运行结果为
Danny
Cindy
但是在传入参数的时候并没有附带对象的地址,那么编译器又是如何知道我们传入的参数是对应于哪一个对象的呢?
这里的原因就在于this指针,实际上,每一个对象都有一个this指针,并且可以通过this指针来访问自己的地址。