+ -
当前位置:首页 → 问答吧 → 求高手帮我讲一下运算符的重载

求高手帮我讲一下运算符的重载

时间:2011-11-27

来源:互联网

C/C++ code
#include <iostream>
using namespace std;
class time
{
public:
    time()
    {
        minute=0;
        sec=0;
    }
    time(int m,int s);
    time operator ++();
    void display()
    {
        cout<<minute<<":"<<sec<<endl;
    }
private:
    int minute;
    int sec;
};
time::time(int m,int s)
{
    minute=m;
    sec=s;
}
time time::operator ++()//////////////需要讲解的地方,
{
    if(++sec>=60)//////////////////需要讲解的地方,如果把>去掉,分就一直加,秒不加了,为什么呢,
    {
        sec-=60;////////////////需要讲解的地方
        ++minute;//////////////////需要讲解的地方
    }
    return *this;//////////////////////需要讲解的地方
}
int main()
{
    int i;
    time time1(30,1);/////////////////////需要讲解的地方
for(i=0;i<61;i++)
{
    ++time1;//////////////////////需要讲解的地方
    time1.display();
}
return 0;
}

作者: a414715440   发布时间: 2011-11-27

每60秒就是一分啊 需要进位
http://blog.sina.com.cn/s/blog_4b3c1f950100kker.html

作者: heksn   发布时间: 2011-11-27

你到底什么地方不明白啊,上面的代码其实很简单。

作者: wltg2001   发布时间: 2011-11-27

C/C++ code

/**********************************************
  下面函数是一个重载 ++ 的函数。
  功能:实现 time 类的 ++ 操作。
  参数:无
  返回值:time
**********************************************/   
time time::operator ++()//////////////需要讲解的地方,【这是重载++函数体定义,有什么要讲的?】
{
    if(++sec>=60)//////////////////需要讲解的地方,如果把>去掉,分就一直加,秒不加了,为什么呢,【把>号去掉就成了 ‘if (++sec = 60)' = 号是赋值操作,返回值是被赋的值。如果是两个 == 才是比较操作。】
    {
        sec-=60;////////////////需要讲解的地方【这句相当于:sec = sec-60】
        ++minute;//////////////////需要讲解的地方【这句相当于:minute = minute+1】
    }
    return *this;//////////////////////需要讲解的地方【这句返回 ++ 操作的结果,但我觉得++操作如果都在 this 成员上操作的话,不需要返回值。因为结果成员已经实实在在地有结果了。除非是重载 = 或者+=或者-= 才需要一个返回值。这里返回结果也许作者别有用途?】
}
int main()
{
    int i;
    time time1(30,1);/////////////////////需要讲解的地方 【声明类对象,用30,1来初始化对象】
for(i=0;i<61;i++)
{
    ++time1;//////////////////////需要讲解的地方【这句相当于: time1 = time1+1】
    time1.display();
}
return 0;
}

作者: hb19820102   发布时间: 2011-11-27