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

这个程序是在不明白应该怎样编,希望大神指导!

童木不会飞 发布于 2013-11-27 20:41, 575 次点击
  定义一个时间类,包括小时、分、秒三个数据成员,自定义构造函数和析构函数,并具有设置时间函数SetTime()、返回时间函数GetTime(),以及显示当前时间的成员函数ShowTime()。此外,还需要对=、+=、++、+、==、!=、>=、<、>这些运算符进行重载。
7 回复
#2
wu27826418032013-11-27 22:52
状态 主 题 发 表 回复 人气 最后更新
 论坛公告:本版禁止毫不思索的求作业。凡此类帖子一概删除。
#3
peach54602013-11-28 11:10
很基础的一些语法...自己尝试一下吧...
#4
童木不会飞2013-11-28 15:35
回复 2楼 wu2782641803
可是我已将尝试着编了一周多的时间了,我就不知道这个程序为啥最后还要对那么多的运算符进行重载,感觉毫无意义
#5
peach54602013-11-28 16:20
回复 4楼 童木不会飞
那就是说如果不要重载,你还是会做的咯?

如果不要重载,你可以不用运算符重载
把所有的运算符变成函数...
比如==,写一个函数叫做isEqual
<写一个函数叫做isLess
...
诸如此类...

顺便回答你的疑问,为什么要重载...
因为A+B=C
你为什么不问"为什么要用运算符,而不是函数呢"
你可以强制用户必须调用C = A.add(B);
结果是一样的...你觉得哪种更有用户接受度呢?

写软件不是说软件功能正确就行了,最终还要有人用啊...

[ 本帖最后由 peach5460 于 2013-11-28 16:24 编辑 ]
#6
左手拉一只猫2013-11-28 16:41
以下是引用peach5460在2013-11-28 16:20:46的发言:

那就是说如果不要重载,你还是会做的咯?

如果不要重载,你可以不用运算符重载
把所有的运算符变成函数...
比如==,写一个函数叫做isEqual
<写一个函数叫做isLess
...
诸如此类...

顺便回答你的疑问,为什么要重载...
因为A+B=C
你为什么不问"为什么要用运算符,而不是函数呢"
你可以强制用户必须调用C = A.add(B);
结果是一样的...你觉得哪种更有用户接受度呢?

写软件不是说软件功能正确就行了,最终还要有人用啊...

详细的解释,没有重载C++功能像被阉割了一部分一样,讲C++的书至少有一章会用来讲重载运算符的。。。。
#7
童木不会飞2013-12-01 22:46
回复 5楼 peach5460
受教了,多谢!!!
#8
tianxin_fox2013-12-07 22:05
重载多见于符合类型, C++提供的运算符只能是单个运算的, 就像你说的时间一样, 必须要有运算符重载才能保证加减乘除赋值之类的,
这是我以前练习的时候写的, 希望对你有帮助
程序代码:
//重载输入输出练习
#include <iostream>
#include <iomanip>
using namespace std;
class Time
{
public:
    Time();
    Time(int x, int y):i(x), j(y){}
    ~Time();
    friend ostream& operator<<(ostream& sc, Time& c);
    friend istream& operator>>(istream& sr, Time& c);
    Time operator+(Time& c)
    {
        Time t;
        t.i = i + c.i;
        if(j + c.j > 59)
        {
            ++t.i;
            t.j = (j + c.j) - 60;
        }
        return t;
    }
    Time operator++()//前++
    {
        if(j > 59)
        {
            j -= 60;
            ++i;
        }
        else
        {
            ++j;
        }
        return *this;
    }
//    Time operator++(int)
private:
    int i;
    int j;
};
Time::Time()
{
    i = 0;
    j = 0;
}
Time::~Time()
{
}
ostream& operator<<(ostream& sc, Time& c)
{
    sc << setw(2) << setfill('0') << c.i << ":" << setw(2) << setfill('0') << c.j << endl;
    return sc;
}
istream& operator>>(istream& sr, Time& c)
{
    sr >> c.i >> c.j;
    return sr;
}
int main(void)
{
    Time t1, t2;
    cin >> t1 >> t2;
    Time t3 = t1 + t2;
    cout << t1 << t2 << endl << t3;
    for(int i = 0; i < 60; ++i)
    {
        cout << t3++;
    }
    return 0;
}

1