谁能详细的解释一下c++类中的的this指针的详细内容!主要是用this返回对象的引用?
展开全部
一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。
this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址。全局仅有一个this指针,当一个对象被创建时,this指针就指向对象数据的首地址。
this指针是类的一个自动生成、自动隐藏的私有成员,它存在于类的非静态成员函数中,指向被调用函数所在的对象的地址。全局仅有一个this指针,当一个对象被创建时,this指针就指向对象数据的首地址。
展开全部
每一个非静态成员函数里面都有一个隐式的this指针,它指向当前调用函数的对象。
比如 stu.Output(); this 指向stu的首地址。
比如 stu.Output(); this 指向stu的首地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
{
……
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;
}
这样的话 只是返回一个新对象,它的数据成员的值和调用函数的对象一样,但不是那个对象本身。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询