6-1 单目运算符重载(时钟类)

6-1 单目运算符重载(时钟类)

分数 10

作者 傅尔胜

单位 郑州航空工业管理学院

本题已给出时钟类及其成员函数实现,要求补充完整运算符++重载函数(前置和后置),使之能够实现时钟对象自增1秒。

时钟类定义如下:

class Clock {
    public:
        Clock(int NewH=0, int NewM=0, int NewS=0);
        void ShowTime();
        friend Clock operator++(Clock& op);         //前置单目运算符重载
        friend Clock operator++(Clock& op,int);     //后置单目运算符重载
    private:
        int Hour, Minute, Second;
};

裁判测试程序样例:

#include<iostream>
using namespace std;

class Clock {
    public:
        Clock(int NewH=0, int NewM=0, int NewS=0);
        void ShowTime();
        friend Clock operator++(Clock& op);         //前置单目运算符重载
        friend Clock operator++(Clock& op,int);     //后置单目运算符重载
    private:
        int Hour, Minute, Second;
};

Clock::Clock(int NewH, int NewM, int NewS) {
    Hour=NewH;
    Minute=NewM;
    Second=NewS;
}
void Clock::ShowTime() {
    cout<<Hour<<":"<<Minute<<":"<<Second<<endl;
}

/*---------请在这里填写答案-----------*/

int main() {
    int h, m, s;
    cin>>h>>m>>s;
    Clock a(h,m,s);

    (++a).ShowTime();
    (a++).ShowTime();
    a.ShowTime();

    return 0;
}

输入样例:

在这里给出一组输入。例如:

10 10 10

输出样例:

在这里给出相应的输出。例如:

10:10:11
10:10:11
10:10:12

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

Clock operator++(Clock& op) {
    op.Second++;
    if (op.Second == 60) {
        op.Second = 0;
        op.Minute++;
    }
    if (op.Minute == 60) {
        op.Minute = 0;
        op.Hour++;
    }
    if (op.Hour == 24) {
        op.Hour = 0;
    }
    return op;
}

// 后置单目运算符重载(友元函数)
Clock operator++(Clock& op, int) {
    Clock temp = op;
    op.Second++;
    if (op.Second == 60) {
        op.Second = 0;
        op.Minute++;
    }
    if (op.Minute == 60) {
        op.Minute = 0;
        op.Hour++;
    }
    if (op.Hour == 24) {
        op.Hour = 0;
    }
    return temp;
}

要注意这里的返回类型都是“Clock"

所以代码是:

Clock operator++(Clock& op)

而不是:

Clock& operator++(Clock& op) 

    • 返回类型是 Clock&,表示返回对象本身的引用
      • 返回类型是 Clock,表示返回对象的副本。
  1. 函数声明和定义必须一致

    • 类内部的友元函数声明与类外部的定义必须匹配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值