关于this指针的疑问

fwq123gg 2013-10-11 06:34:56

Clock &Clock::operator++ ()
{
second++;
if (second >= 60)
{
second -= 60;
minute++;
if (minute >= 60)
{
minute -= 60;
hour = (hour + 1) % 24;
}
}
return *this;
}

Clock &Clock::operator++ ()这一句定义了重载成员函数的返回值是Clock类的指针
然后*this不是对象本身吗?
另外

Clock Clock::operator++ (int)
{
Clock old = *this;
++ (*this);
return old;
}

这一段里面新建立了个Clock对象old,然后这里的*this就不明白是指向的哪个对象了
而且Clock old = *this;之后调用前置++重载成员函数自增最后返回old对象是什么意思,old的值不是没有改变吗?
求大神指教啊
...全文
98 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
modyaj 2013-10-11
  • 打赏
  • 举报
回复
引用 5 楼 fwq123gg 的回复:
[quote=引用 1 楼 modyaj 的回复:]
1 是的
2 后置++是先使用数据 然后再++ 返回的数据原来的数据 而不是更新过的数据


#include <iostream>
using namespace std;
class Clock
{
public:
Clock (int hour = 0, int minute = 0, int second = 0);
void showTime () const;
Clock& operator++ ();
Clock operator++ (int);
private:
int hour, minute, second;
};
Clock::Clock (int hour, int minute, int second)
{
if (0 <= hour && hour < 24 && 0 <= minute && minute < 60 && 0 <= second && second < 60)
{
this->hour = hour;
this->minute = minute;
this->second = minute;
}
else
{
cout<<"ERROR"<<endl;
}
}
void Clock::showTime () const
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
Clock &Clock::operator++ ()
{
second++;
if (second >= 60)
{
second -= 60;
minute++;
if (minute >= 60)
{
minute -= 60;
hour = (hour + 1) % 24;
}
}
return *this;
}
Clock Clock::operator++ (int)
{
Clock old = *this;
++ (*this);
return old;
}
int main ()
{
Clock myClock (23, 59, 59);
myClock.showTime ();
(myClock ++).showTime ();
}

这是全部代码,最后输出三个值,而最后一个输出的值是自增过后的值[/quote]
输出是下面这样吧!

第一个输出 原来的数值 没问题
第二个输出 后置++ 先使用原来的数据(就是先输出数据(你返回的old))然后再++ 完后此时已经是00:00:00
第三个输出 前置++ 00:00:00的基础上+1 然后输出 得到图上的结果
fwq123gg 2013-10-11
  • 打赏
  • 举报
回复
引用 3 楼 fwq123gg 的回复:
[quote=引用 2 楼 rocktyt2 的回复:] old是自增前的一个备份,后置++返回的值是自增前的值,但值本身已经完成++
虽然值完成了自增,但返回的是old的值啊,old在开始被赋予*this的值过后就没有进行自增(最后输出的结果是自增过后的结果) 并且这时候的*this和前置++重载函数里面的*this是指的同一个对象吗?[/quote] 多谢,大概明白了,是我绕进去了
fwq123gg 2013-10-11
  • 打赏
  • 举报
回复
引用 1 楼 modyaj 的回复:
1 是的 2 后置++是先使用数据 然后再++ 返回的数据原来的数据 而不是更新过的数据

#include <iostream>
using namespace std;
class Clock
{
public:
	Clock (int hour = 0, int minute = 0, int second = 0);
	void showTime () const;
	Clock& operator++ ();
	Clock operator++ (int);
private:
	int hour, minute, second;
};
Clock::Clock (int hour, int minute, int second)
{
	if (0 <= hour && hour < 24 && 0 <= minute && minute < 60 && 0 <= second && second < 60)
	{
		this->hour = hour;
		this->minute = minute;
		this->second = minute;
	}
	else
	{
		cout<<"ERROR"<<endl;
	}
}
void Clock::showTime () const
{
	cout<<hour<<":"<<minute<<":"<<second<<endl;
}
Clock &Clock::operator++ ()
{
	second++;
	if (second >= 60)
	{
		second -= 60;
		minute++;
		if (minute >= 60)
		{
			minute -= 60;
			hour = (hour + 1) % 24;
		}
	}
	return *this;
}
Clock Clock::operator++ (int)
{
	Clock old = *this;
	++ (*this);
	return old;
}
int main ()
{
	Clock myClock (23, 59, 59);
	myClock.showTime ();
	(myClock ++).showTime ();
	(++myClock).showTime ();
	return 0;
}
这是全部代码,最后输出三个值,而最后一个输出的值是自增过后的值
Qyee16 2013-10-11
  • 打赏
  • 举报
回复
前置++, 是返回自加后的数据 后指++,返回的是没自加前的数据,而自加对象已经改变 It's the game rule....
fwq123gg 2013-10-11
  • 打赏
  • 举报
回复
引用 2 楼 rocktyt2 的回复:
old是自增前的一个备份,后置++返回的值是自增前的值,但值本身已经完成++
虽然值完成了自增,但返回的是old的值啊,old在开始被赋予*this的值过后就没有进行自增(最后输出的结果是自增过后的结果) 并且这时候的*this和前置++重载函数里面的*this是指的同一个对象吗?
rocktyt 2013-10-11
  • 打赏
  • 举报
回复
old是自增前的一个备份,后置++返回的值是自增前的值,但值本身已经完成++
modyaj 2013-10-11
  • 打赏
  • 举报
回复
1 是的 2 后置++是先使用数据 然后再++ 返回的数据原来的数据 而不是更新过的数据

64,639

社区成员

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

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