总结C++中的this指针

思考:对于下面的三个对象,在调用相应的成员方法,那么在内部这个类是被怎么调用的?是复制三个相同的成员方法和成员数据来处理还是其他方式呢?
答:会复制三份成员属性,但是成员方法是公有的,通过this指针来判断是哪个对象在用成员方法。

class CGoods
{
private:
    char Name[21];
    int Amount;
    float Price;
    float Total_value;
public:
     void RegisterGoods(char[],int,float);
     void CountTotal(void);
     void GetName(char[]);
     int GetAmount(void);
     float GetPrice(void);
     float GetTotal_value(void);
}
int main()
{
     CGoods c1,c2,c3;
     c1.RegisterGoods("C++",12,98,99);
     c1.CountTotal();
     c2.RegisterGoods("Java",23,12,23);
     c2.CountTotal();
     c3.RegisterGoods("数据结构",23,34,56);
     c3.CountTotal();
}

编译器对类的编译分为三步骤:
(1)识别属性成员,对属性成员记录下来,放到描述表中(明确类型具有的属性)
(2)对函数的声明进行识别,不进行函数体的识别
(3)进行改写,对函数的形参加上this指针
例如:

void CGood::CountTotal()

①加上this指针之后如下
void CGood::CountTotal(CGoods *this)

②在函数体中的形参中如果加了this指针,系统不改写,否则如果我们没有手动加上this指针,系统就会在编译的时候改写

③在主函数中,调用方法的时候加上(&c1),从而把这个地址给this指针
//c1.CountTotal(&c1);//编译的时候加上对象的地址

④this在类的成员函数里面,不在对象里面,是编译的时候加上去的

通过this从而使得方法为每一个对象共享
为了避免将this设为NULL,C++会加上const——CGoods * const this
在这里插入图片描述
这一句Test::SetValue(a,b),error,因为没有对象,this指针没法指向对象的地址

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仟各

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值