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

帮我看看这个程序,分析一下它的执行过程!

发布于 2010-05-05 20:31, 658 次点击
#include <iostream>
using namespace std;
class Clock
{
public:
    Clock(int NewH=0,int NewM=0,int NewS=0);
    void ShowTime();
    Clock& operator ++();
    Clock operator ++(int);
private:
    int Hour,Minute,Second;
};
Clock::Clock(int NewH,int NewM,int NewS)
{
    if(0<=NewH&&NewH<24&&0<=NewM&&NewM<60&&0<=NewS&&NewS<60)
    {
        Hour=NewH;
        Minute=NewM;
        Second=NewS;
    }
else
cout<<"Time error!"<<endl;
}
void Clock::ShowTime()
{
    cout<<Hour<<":"<<Minute<<":"<<Second<<endl;
}
Clock& Clock::operator ++()
{
    Second++;
    if(Second>=60)
    {
        Second=Second-60;
        Minute++;
        if(Minute>=60)
        {
            Minute=Minute-60;
            Hour++;
            Hour=Hour%24;
        }
    }
    return *this;
}
Clock Clock::operator ++(int)
{
    Clock old=*this;
    ++(*this);
    return old;
}
int main()
{
    Clock myClock(23,59,59);
    cout<<"First time output:";
    myClock.ShowTime();
    cout<<"Show myClock++:";
    (myClock++).ShowTime();
    cout<<"Show ++myClock:";
    (++myClock).ShowTime();
}
帮我分析一下它的执行过程,还有这里这个‘*this’是什么意思?int main()中的为什么用(myclock++).showtime()来输出结果?谢谢了!


8 回复
#2
2010-05-05 20:32
还有Clock Clock::operator ++(int)
{
    Clock old=*this;
    ++(*this);
    return old;
}
中的++(*this)是什么意思?
#3
南国利剑2010-05-05 22:05
this是一个指针,在构造类的对象的时候,每一个对象都会生成一个指向自己的指针,并以此来区别自己和不同的对象。
所以*this就是指当前对象。
++(*this)的意思就是对当前对象执行++运算。

希望对你有帮助,多多指教!

[ 本帖最后由 南国利剑 于 2010-5-5 22:12 编辑 ]
#4
2010-05-05 22:23
int main()中的为什么用(myclock++).showtime()来输出结果?
因为在类中对++运算符进行了重载,调用(myclock++).showtime()来输出时间的目的就是告诉你++运算符以后就有对Clock对象增加的功能了。
#5
2010-05-05 22:42
帮我分析 一下这个程序的过程吧,我不是很清楚,谢谢!
#6
最近不在2010-05-06 13:45
int main()
{
    Clock myClock(23,59,59);  //用带参数构造函数初始化似有成员,时分秒。
    cout<<"First time output:";
    myClock.ShowTime();  //输出当前时分秒
    cout<<"Show myClock++:";   
    (myClock++).ShowTime();   //选取重载函数,右加。返回原始时间   
    cout<<"Show ++myClock:";
    (++myClock).ShowTime(); // 选取重载函数,左加。时间+1
}

这个程序就是要注意++重载的格式。。。。
左加,重载函数的一般格式为: Clock& operator ++();  这里用到&不是很理解???求解
右加,重载函数的一般格式为: Clock operator ++(int);
#7
2010-05-06 15:59
我也不是很清楚这个“&”,在这里是什么个意思?哪位高手能解释一下,谢谢了!
#8
最近不在2010-05-06 16:45
我想的话,&是为了对函数内部的操作,在函数结束时,其效果是保存的。可这里没必要加&,因为成员函数本来就是对私有成员操作的,如果是友元函数的话,就要加&了。
类似一般函数的形参,按值传递,传引用,按址传递!
#9
2010-05-06 19:03
对啊,我感觉这个&也没有什么用处,去掉执行结果也正确。但是我看书上说,有&函数的返回值可以作为左值,没有的话不可以做左值。
1