C++初级主题--(1)this指针

一.this指针的出现
1.C++中的指针
C和C++指针的最重要的区别在于C++是一种类型要求更强的语言。就void*而言,这一点表现的更突出。C不允许随便的把一个类型的指针赋给另一个类型,但允许通过void*来实现。例如:

bird *b;
rock *r;
void *v;
v = r;
b = v;

由于C的这种功能允许把任何一种类型看作别的类型处理,这就在类型转换系统中留下了一个大的漏洞。C++不允许这样做,其编译器会给出出错信息。如果要把某种类型当作别的类型进行处理,必须显式的类型转换,通知编译器。
2.this指针的出现
(1)C++对象的存储模型引出了this指针
实例化出的对象,数据自己保存,代码共用一份。内存得到了很好的使用。
这里写图片描述
用对象调用fun方法,this指针就代表了对象,接收该对象的地址。
(2)this指针什么时候出现
只有当对象调用函数的这一刻,在函数的内部隐蔽的插入this指针。this所接受的地址随着对象的不同而不同,谁调用即是谁的地址。
(3)类实例化出的对象调用类内函数时,编译器的做法
识别类名–>识别数据成员–>对方法(函数)进行识别并且改写(在所有参数之前加入自身类型的this指针)

1)调用时,调用方法的形式
CGoods c1;
//c1.RegisterCoods(&c1, "C++", 1, 1);
c1.RegisterCoods("C++", 1, 1);
2)调用时,类内部函数的改写
//void RegisterGoods(CGoods *const this, char name[], int amount, int price);
void RegisterGoods(char name[], int amount, int price);

二.this指针不简单
1.this不允许改写,this所指的成员可以修改

1)如果不加const
void RegisterGoods(CGoods *this, char name[], int amount, int price)
{
    this = NULL;//这样,编译器都不允许这样做。
}
//this所代表的对象,即this指向的地址(注意不是this的地址&this)不能改变
2)所以要加const
void RegisterGoods(CGoods *const this, char name[], int amount, int price)
{
    this->amount = amount;//this所指的成员可以修改,只能修改*this
}
//保证this的指向不变

补充:

const作用总结:
封锁参数/修饰函数/修饰返回值
注:const修饰变量时位置不同,含义不同

三.小结
从对象的存储模型讲起,共有方法如何识别哪个对象在调动它,就是通过this指针,this指针只会在对象调动方法时,才会被隐蔽的插入参数列表的第一个位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值