C++中this指针
由类生成对象时,对象中只保存私有数据。
因为由一个类生成的所有对象为其数据服务的方法都是相同的,因此,一个类中的方法是大家所共用的。
而这就牵扯到当对象A调用方法时,如何保证该方法操作的数据是对象A的数据。
#include<iostream> using namespace std; #define MAX 10 class OBJ { private: char Name[MAX]; int Num; float Price; float Total_price; protected: public: void Get_obj(char name[], int num, float price) { strcpy(Name, name); Num = num; Price = price; Total_price = Price*Num; } }; void main() { OBJ ob; ob.Get_obj("LLL",10,10);//对象ob调用方法Get_obj }
看起来是通过对象名称调用,实则其本质是通过this指针来区别调用的对象到底是谁
进入方法前对象ob的地址为0x0088f748
进入方法后可看到该方法隐藏的this指针地址同样为0x0088f748
这也就共用方法为何可以区别调用对象的原因。
值得一提的是this指针是一个固定方向指针,即 OBJ *const this (自己的理解方法:this指针是一个常量指针指向OBJ)
因此在类的方法中不可修改其指向,但是可以修改其指向的内容。
public: void Get_obj(char Name[], int Num, float Price) { strcpy(this->Name, Name); this->Num = Num; this->Price = Price; this->Total_price = Price*Num; } private: char Name[MAX]; int Num; float Price; float Total_price;
可清楚地看出,Get_obj方法中的参数与私有数据成员同名,但是使用this指针后,便不会报错。
总结:this指针是一个固定方向指针,代表当前对象,且只在对象调用方法的时候出现。
不积小流无以成江河