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指针是一个固定方向指针,代表当前对象,且只在对象调用方法的时候出现。

 

posted @ 2019-01-24 14:12  C_hp  阅读(219)  评论(0编辑  收藏  举报