this指针的使用范围?

otianna 2009-02-23 01:10:48
书上的解释是指向一个类的一个对象,且这个对象的某个成员函数正在调用。
想问的是:在哪种情况下我必须要用这个指针呢?希望有实例,谢谢
...全文
459 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
路人甲三号 2010-12-02
  • 打赏
  • 举报
回复
做个记号.
ch274147182 2010-08-04
  • 打赏
  • 举报
回复
30楼的this味道怪怪的,不过蛮香的!
sendto66 2009-02-24
  • 打赏
  • 举报
回复
mark
netsocket 2009-02-24
  • 打赏
  • 举报
回复
mark
stock888 2009-02-24
  • 打赏
  • 举报
回复
传递参数时
whillcoxdennis 2009-02-24
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;
class One
{
public:
One()
{
U=0;
V=0;
}
One(int x,int y)
{
U=x;
V=y;
}
void Copy(One &a);
void Print()
{
cout<<U<<"\n"<<V<<endl;
}
private:
int U,V;
};
void One::Copy(One &a)
{
if(this==&a) return;
else *this=a;
}
void main()
{
One one,two(3,4);
one.Print();
one.Copy(two);
one.Print();
}
楼主看看这个例子也许就会明白一些了,调用one的copy函数 从而this指针指向one的,然后实现复制。
希望对lz有所启发~
bfhtian 2009-02-24
  • 打赏
  • 举报
回复
一般在返回对类或结构休的引用时,要返回*this
snowying2008 2009-02-24
  • 打赏
  • 举报
回复
bangdingaaa
snowying2008 2009-02-24
  • 打赏
  • 举报
回复
bangding
snowying2008 2009-02-24
  • 打赏
  • 举报
回复
bangding
herman~~ 2009-02-24
  • 打赏
  • 举报
回复
挺多情况下都可以使用

例如:拷贝构造函数,赋值函数等

CTest& CTest::operator=(CTest & rObj)
{
this->i = rObj.i;
return *this;
}
chxy85 2009-02-23
  • 打赏
  • 举报
回复
this很有用的,在VC里面
MooreChen 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 MooreChen 的回复:]

如果你需要返回对象的地址,例如你重载了取址运算符&,就要用到this(摘自Effective C++):

inline Empty * Empty::operator&() { return this; }

inline const Empty * Empty::operator&() const
{ return this; }
[/Quote]

很多情况下为了实现链式操作,重载运算符也会返回当前对象的引用,也就是*this。
ligang198402 2009-02-23
  • 打赏
  • 举报
回复
刚注册 路过,看看风气
aime99 2009-02-23
  • 打赏
  • 举报
回复
1 取得对象本身 *this
2 指明之用的变量或函数是对象范围内的
lecoo 2009-02-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 Dinelgua 的回复:]
拷贝构造函数里一般都需要用到

A& A(const & temp)
{
this.x = temp.x;
return *this;
}
[/Quote]

拷贝构造函数是无返回值的。
Lovegarfield 2009-02-23
  • 打赏
  • 举报
回复
最常用的地方是定义重载操作符时返回return *this
skyygl 2009-02-23
  • 打赏
  • 举报
回复
this指针的含义是指向调用成员函数的对象的指针,从而通过这个this指针就可以把调用成员函数的非静态数据成员和调用对象绑定在一起,举个例子吧:
#include <iostream>
using namespace std;

class Base
{
public:
Base(int temp);
Base& operator+(Base& obj);
friend ostream& operator<<(ostream& os,Base& obj);
private:
int a;
};

Base::Base(int temp)
{
a = temp;
}

Base& Base::operator +(Base &obj)
{
a += obj.a;
return *this;
}

ostream& operator<<(ostream& os,Base& obj)
{
os<<obj.a<<endl;
return os;
}

void main()
{
Base obj1(10);
Base obj2(20);
cout<<obj1+obj2<<endl;
}

上面例子中,重载+运算符里面返回的就是*this,也就是this指针所指向的当前对象。
MooreChen 2009-02-23
  • 打赏
  • 举报
回复

如果你需要返回对象的地址,例如你重载了取址运算符&,就要用到this(摘自Effective C++):

inline Empty * Empty::operator&() { return this; }

inline const Empty * Empty::operator&() const
{ return this; }
passionboy03 2009-02-23
  • 打赏
  • 举报
回复
up
[Quote=引用 3 楼 waizqfor 的回复:]
引用楼主 otianna 的帖子:
书上的解释是指向一个类的一个对象,且这个对象的某个成员函数正在调用。
想问的是:在哪种情况下我必须要用这个指针呢?希望有实例,谢谢

1. this指针的用处:一 个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态 成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没…
[/Quote]
加载更多回复(12)

64,660

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧