this 指针(C++学习笔记 22)

  • 当定义了一个类的若干对象后,系统会为每一个对象分配存储空间。

  • 如果一个类包含了数据成员和成员函数,就要分别为数据和函数的代码分配存储空间。

  • 事实上,给对象赋值就是给对象的数据成员赋值,不同对象的存储单元中存放的数据值通常是不同的,而不同对象的函数代码是相同的,不论调用哪一个对象的成员函数,其实调用的都是相同内容的代码。

  • 每个对象的存储空间都只是该对象的数据成员所占用的存储空间,而不包括成员函数代码所占用的空间,函数代码是存储在对象空间之外的。

  • 每个对象都有属于自己的数据成员,但是所有对象的成员函数代码却合用一份。

  • 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;
}

输出结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/aaqian1/article/details/84137285
c22
今日推荐