谁能详细的解释一下c++类中的的this指针的详细内容!主要是用this返回对象的引用?
答案:3 悬赏:70 手机版
解决时间 2021-03-20 10:32
- 提问者网友:疯孩纸
- 2021-03-19 20:55
谁能详细的解释一下c++类中的的this指针的详细内容!主要是用this返回对象的引用?
最佳答案
- 五星知识达人网友:傲气稳了全场
- 2021-03-19 21:12
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类型
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类型
全部回答
- 1楼网友:英雄的欲望
- 2021-03-19 22:31
每一个非静态成员函数里面都有一个隐式的this指针,它指向当前调用函数的对象。
比如 stu.Output(); this 指向stu的首地址。
比如 stu.Output(); this 指向stu的首地址。
- 2楼网友:深街酒徒
- 2021-03-19 22:23
一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。
this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址。全局仅有一个this指针,当一个对象被创建时,this指针就指向对象数据的首地址。
this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址。全局仅有一个this指针,当一个对象被创建时,this指针就指向对象数据的首地址。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯