注册 登录
编程论坛 C++教室

this指针

一切皆安 发布于 2011-06-22 09:54, 732 次点击
我有个问题不太理解
this指针是个隐含的指针,例如x=0等价于this->x=0,那我们为什么要用this指针呢。
比如下面这个程序

#include<iostream>
using namespace std;
class point
{
public:
  int x;
  int y;
  point()
  {
  x=0;      //这里是不是也有this指针呢???
  y=0;
  }
  point(int a,int b)
  {
  x=a;    //如果按上面的理解,那这里是不是也是一个this指针呢,如果每个对象都隐含一个this指针,那不就乱套了吗。
  y=b;
  }
  ~point()
  {
  }
void output()
{
 cout<<x<<endl<<y<<endl;
}
void output(int x,int y)
{
 this->x=x;
 this->y=y;
}
};
void main()
{
point pt(3,3);
pt.output(5,5);
pt.output();
}

11 回复
#2
rjsp2011-06-22 10:48
你的意思是不是
void output(int x,int y)
{
this->x=x;
this->y=y;
}
应该写成
void output(int x,int y)
{
x=x;
y=y;
}
?????????????????????
#3
Toomj2011-06-22 10:51
http://baike.baidu.com/view/2140472.htm
#4
wavewind2011-06-22 10:53
我的感觉不是上楼的意思,楼主的实际问题应该是对象的隐含this指针和函数重载搞不清楚的问题,这个其实查下有关资料很容易的。
#5
hoho5682011-06-22 12:34
在成员函数内部显示调用this指针通常是不必要的,就像楼主所说的。但是有一些情况,this指针就无可代替了,当我们需要将一个对象作为整体引用而不是引用对象的一个成员时,就需要用this指针了,最常见情况是在函数返回调用该函数的对象的引用的时候。
就是所谓的 return *this;
#6
一切皆安2011-06-22 19:42
回复 2楼 rjsp
是的,我就不太理解这个THIS指针
#7
我是菜鸟C2011-06-22 23:10
output(x,y)这里面的x,y是两个变量,并不是当前变量,this—>x=x是表示将变量x的值赋值给了当前变量x,那么之后主函数中你的对象才会有一个确定的值。你要知道在类中类的成员函数是不为不为某一个对象所独自拥有的,是公共的。
#8
rjsp2011-06-23 08:22
以下是引用一切皆安在2011-6-22 19:42:52的发言:

是的,我就不太理解这个THIS指针
假如不加this,就是
void output(int x,int y)
{
    x=x;
    y=y;
}
很显然x=x中两个x都是指参数列表中的x,而非point中的x。

你可以
void output( int x_, int y_ )
{
    x = x_;
    y = y_;
} 即使用不同的名字(推荐使用这种方法)

还可以
void output( int x, int y )
{
    this->x = x_;
    this->y = y_;
} 即指定对象


还可以
void output( int x, int y )
{
    point::x = x_;
    point::y = y_;
} 即指定域


[ 本帖最后由 rjsp 于 2011-6-23 11:44 编辑 ]
#9
pangding2011-06-23 09:20
我看记住 rjsp 推荐的方法就行了。其它的方法应该敬而远之。
#10
BlueGuy2011-06-23 11:10
回复 9楼 pangding
先前 东海一鱼 说了一个 windows下的grep, 你还记得吗?
#11
BlueGuy2011-06-23 18:37
vs2005 搜索也不错, 以前都没想到..
#12
pangding2011-06-23 21:50
回复 10楼 BlueGuy
有点印象。不过当时没想过要在 windows 下用,所以也没怎么在意。

vim 和 emacs 都自己实现了 grep,可以在 windows 下使。虽然 vim 的那个用着有点别扭吧……


[ 本帖最后由 pangding 于 2011-6-23 21:56 编辑 ]
1