-
当定义了一个类的若干对象后,系统会为每一个对象分配存储空间。
-
如果一个类包含了数据成员和成员函数,就要分别为数据和函数的代码分配存储空间。
-
事实上,给对象赋值就是给对象的数据成员赋值,不同对象的存储单元中存放的数据值通常是不同的,而不同对象的函数代码是相同的,不论调用哪一个对象的成员函数,其实调用的都是相同内容的代码。
-
每个对象的存储空间都只是该对象的数据成员所占用的存储空间,而不包括成员函数代码所占用的空间,函数代码是存储在对象空间之外的。
-
每个对象都有属于自己的数据成员,但是所有对象的成员函数代码却合用一份。
-
this 指针,称为自引用指针。每当创建一个对象时,系统就把 this 指针初始化为指向该对象,即 this 指针的值是当前调用成员函数的对象的起始地址。
-
this 指针是隐式使用的,它是作为参数被传递给成员函数的。
-
例如,当调用成员函数 a.disp 时,编译系统就把对象 a 的起始地址赋给 this 指针,于是在成员函数引用数据成员时:
cout<<“x=”<< this->x <<endl;
相当于执行:
cout<<“x=”<<a.x<<endl; -
this 指针的作用:每当调用一个成员函数时,系统就自动把 this 指针作为一个隐含的参数传给该函数。不同的对象调用同一个成员函数时,C++编译器将根据成员函数的 this 指针所指向的对象来确定应该引用哪一个对象的数据成员。
-
例如,成员函数的定义如下:
void disp( ){
cout<<" x= "<<x<<endl;
}
实际是相当于执行:
void disp( * this ){
cout<<“x=”<< this->x<<endl;
}
在调用时a.disp( )也被处理成 a.disp(&a)
例 1 : 显示 this 指针的值
#include<iostream>
using namespace std;
class A{
public:
A(int x1){
x=x1;
}
void disp(){
cout<<"this="<<this<<" when x="<<this->x<<endl;
}
private:
int x;
};
int main(){
A a(1),b(2),c(3);
a.disp();
b.disp();
c.disp();
return 0;
}
输出结果如下: