永发信息网

谁能详细的解释一下c++类中的的this指针的详细内容!主要是用this返回对象的引用?

答案:3  悬赏:70  手机版
解决时间 2021-03-20 10:32
谁能详细的解释一下c++类中的的this指针的详细内容!主要是用this返回对象的引用?
最佳答案
1、其实在编译器内部,成员函数和非成员函数的调用是一样的。你定义了一个类的成员函数,编译器会把它变成一个普通函数,为了知道哪一个对象调用了该函数,它会插入一个参数,比如
class test
{
……

void fun(int i){}

……
};
针对fun编译器生成的的全局函数是
void fun(test* this,int i){}//没考虑重命名机制
如果有这样的应用
test t1;
t1.fun(2);//case 1
对于case 1编译器生成的代码是
fun(&t1,2);

2、如果成员函数是const修饰的
class test
{
……
void fun(int i) const{}
……
};
那么编译器的处理是
void fun(const test* this,int i){}

也就是说,你不能改变this指向的对象

3、至于static修饰的函数,它不属于任何类,因此编译器不会插入this指针。
4、若是要返回对象的引用的话,可以这样
class test
{
……
test& fun(int i) const{return *this;}
……
};追问class test
{
……
test& fun(int i) const{return *this;}
……
};
这怎么理解呀?就是返回对象?能不能解释一下呢?就像指针那样解释就行了!!!谢谢呀追答test& fun(int i)
{
return *this;
}

这种方式就是返回对this所指对象的引用,也就是说哪个对象调用了这个函数,返回的就是哪个对象的引用;
test fun(int i)
{
return *this;
}
这样的话 只是返回一个新对象,它的数据成员的值和调用函数的对象一样,但不是那个对象本身。追问test fun(int i)
{
return *this;
}
如果没有return *this;这条语句,那么将会怎样?谢谢,真的谢谢!这些我自己在好多书上都没有找到!!!追答没有return *this;的话,函数就没有返回值了,或者说返回值是void类型
全部回答
每一个非静态成员函数里面都有一个隐式的this指针,它指向当前调用函数的对象。
比如 stu.Output(); this 指向stu的首地址。
一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。
this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址。全局仅有一个this指针,当一个对象被创建时,this指针就指向对象数据的首地址。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
五征农用车发电机不发电
玉华皮鞋厂怎么去啊,有知道地址的么
膝盖左下方疼是怎么回事
g-technology 1tb g-drive 移动 usb-c 便携式
在淘宝买完东西后,如何给店家评价?
梦幻西游109,PS和MW哪个更好玩?
为什么货车不给办进京证?
等下你就戳哨 这是什么意思 钦州白话
如何右键新建文本文档
单选题新航路开辟对世界历史作出的最主要的贡
浙江省机关事务管理局通信与网络服务中心怎么
exo秀敏(xiumin)歌曲you are the one 百度
佛教可以在屋后种桃树吗
央视屏幕尺寸经常在4:3和16:9之间变化,为什
荠莱晒干能煲汤喝吗
推荐资讯
求炫舞网名红橙黄绿青蓝紫四字成语网名! 例
艾丽丝发型设计地址有知道的么?有点事想过去
现在的马桶冲水方式有哪几种
木香茗用的是哪一级的普洱茶??
王者荣耀qq号qq密码全皮肤全英雄保证不改密码
趋势外推法的线性外推法
单选题同一品种的菊花有粉红色的花,有白色的
win7 64位,如何装Intel Matrix Storage Mana
69年阳历9月2号是什么星座
学道家法术会五弊三缺吗?
求极限时,分子分母为零,答案为什么有时候为
马自达3昂克赛拉三厢改装报价马3昂科塞拉怎么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?