| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 732 人关注过本帖
标题:this指针
只看楼主 加入收藏
一切皆安
Rank: 2
等 级:论坛游民
帖 子:70
专家分:46
注 册:2011-4-2
结帖率:91.67%
收藏
已结贴  问题点数:5 回复次数:11 
this指针
我有个问题不太理解
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();
}

搜索更多相关主题的帖子: void include public 
2011-06-22 09:54
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9032
专家分:54066
注 册:2011-1-18
收藏
得分:0 
你的意思是不是
void output(int x,int y)
{
this->x=x;
this->y=y;
}
应该写成
void output(int x,int y)
{
x=x;
y=y;
}
?????????????????????
2011-06-22 10:48
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:0 
http://baike.baidu.com/view/2140472.htm
2011-06-22 10:51
wavewind
Rank: 3Rank: 3
来 自:浙江
等 级:论坛游侠
帖 子:34
专家分:101
注 册:2011-5-13
收藏
得分:1 
我的感觉不是上楼的意思,楼主的实际问题应该是对象的隐含this指针和函数重载搞不清楚的问题,这个其实查下有关资料很容易的。
2011-06-22 10:53
hoho568
Rank: 5Rank: 5
等 级:职业侠客
帖 子:101
专家分:378
注 册:2009-7-14
收藏
得分:1 
在成员函数内部显示调用this指针通常是不必要的,就像楼主所说的。但是有一些情况,this指针就无可代替了,当我们需要将一个对象作为整体引用而不是引用对象的一个成员时,就需要用this指针了,最常见情况是在函数返回调用该函数的对象的引用的时候。
就是所谓的 return *this;
2011-06-22 12:34
一切皆安
Rank: 2
等 级:论坛游民
帖 子:70
专家分:46
注 册:2011-4-2
收藏
得分:0 
回复 2楼 rjsp
是的,我就不太理解这个THIS指针
2011-06-22 19:42
我是菜鸟C
Rank: 4
等 级:业余侠客
帖 子:74
专家分:200
注 册:2011-3-27
收藏
得分:1 
output(x,y)这里面的x,y是两个变量,并不是当前变量,this—>x=x是表示将变量x的值赋值给了当前变量x,那么之后主函数中你的对象才会有一个确定的值。你要知道在类中类的成员函数是不为不为某一个对象所独自拥有的,是公共的。
2011-06-22 23:10
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9032
专家分:54066
注 册:2011-1-18
收藏
得分:2 
以下是引用一切皆安在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 编辑 ]
2011-06-23 08:22
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
我看记住 rjsp 推荐的方法就行了。其它的方法应该敬而远之。
2011-06-23 09:20
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 9楼 pangding
先前 东海一鱼 说了一个 windows下的grep, 你还记得吗?

我就是真命天子,顺我者生,逆我者死!
2011-06-23 11:10
快速回复:this指针
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017372 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved