由类生成对象时,对象中只保存私有数据。
因为由一个类生成的所有对象为其数据服务的方法都是相同的,因此,一个类中的方法是大家所共用的。
而这就牵扯到当对象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指针是一个固定方向指针,代表当前对象,且只在对象调用方法的时候出现。