| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1486 人关注过本帖
标题:this指针作为临时对象的困惑
只看楼主 加入收藏
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:27 
this指针作为临时对象的困惑
#include<iostream>
using namespace std;
class Date
{
 int month,day,year;
public:
 Date(int m=0,int d=0,int y=0):month(m),day(d),yaer(y){}
 Date operator--(int);
 void display()
 {cout<<year<<" "<<month<<" "<<day<<endl;}
};
Date operator--(int)
{
  Date dt(*this);//等价于Date dt=*this语句,创建一个临时对象,然后调用拷贝构造函数
  month--;
if(month<=0)
{month+=12;--year;}
return dt;
}
void main()
{
  Date dt(12,18,2008);
  Date da;
  da=dt--;
  cout<<"da:";
  da.display();
  dt.display();
}
加颜色部分我不懂,在这里,this 指针怎么用?怎么创建一个临时对象?求解答
搜索更多相关主题的帖子: return public include display 
2013-06-07 00:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:5 
Date dt(*this);//等价于Date dt=*this语句,创建一个临时对象,然后调用拷贝构造函数
------ “等价于Date dt=*this语句”是对的,“创建一个临时对象”是在瞎扯
2013-06-07 08:26
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:5 
回复 2楼 rjsp
不是调用的拷贝构造么
dt是个临时变量,没错吧

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-06-07 09:04
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 3楼 peach5460
“Date dt(*this);//等价于Date dt=*this语句,创建一个临时对象,然后调用拷贝构造函数”

这句话太难理解了,第一次回答时,我就有两种不同的理解。再看到你的回复,又是一种理解方式。
你的理解是:Date dt(*this);等价于Date dt=*this语句;Date dt(*this)创建一个临时对象,然后调用拷贝构造函数。
我当时的理解是:Date dt(*this);等价于Date dt=*this语句,内部实现过程都是 创建一个临时对象,然后调用拷贝构造函数”
                Date dt(*this);等价于Date dt=*this语句,内部实现过程唯一差别是其中某个是 创建一个临时对象,然后调用拷贝构造函数”

也就是,那个逗号前后是 并列陈述的关系,还是 互为解释的关系。
2013-06-07 09:37
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:0 
相比较而言,peach5460的理解是对的,我错了

昨天我去高老庄了,我姓高,不要门票 --- 通常会理解为:因为我姓高,所以才不要买门票
A: 那谁谁谁,帮我去卖张门票。B: 我姓高,不要门票 --- 通常会理解为:我有名有姓的,不要无礼地呼我为“那谁谁谁”;而且高老庄是开放式的,本就不需要门票。
2013-06-07 09:44
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
回复 5楼 rjsp
呵呵,我知道我跟你理解的差异性问题了
看来楼主的注释功底不行呐

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-06-07 11:07
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
回复 2楼 rjsp
Date dt(*this)这个语句,应该没有创建一个临时对象吧?我怎么弄也弄不懂,如果真的需要创建临时对象的话,这个过程是怎么发生的?
因为这个this指针是一个系统变量,不能对其进行赋值操作,所以this指针只能指向一个对象,那么this指针能不能从中读取数据?如果能,前提说了不能对this指针进行赋值操作,那就要创建一个临时对象来储存this指针所读取出来的数据。但最后又回头想了想,这个语句怎么创建临时对象啊,this指针指向一个对象,进行赋值的时候自然会调用拷贝构造函数的呀,需要临时对象吗

思考赐予新生,时间在于定义
2013-06-07 11:44
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 7楼 love云彩
对于那段注释,你的理解和我的理解是一样的
但原作者的意思应当如三楼peach5460那么理解
2013-06-07 11:58
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
对于那个临时对象的用法,我始终无法理解,百度找了一下,太泛了,没有我想要的答案,版主能不能就临时对象给我举几个简单的例子?

思考赐予新生,时间在于定义
2013-06-07 12:28
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
回复 3楼 peach5460
dt是一个对象,不是变量吧?,对象与变量之间能划上等号吗

思考赐予新生,时间在于定义
2013-06-07 12:33
快速回复:this指针作为临时对象的困惑
数据加载中...
 
   



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

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