一起学习交流~

c/c++细节知识点 12运算符重载

c++面试准备 laomuji 4周前 (09-01) 60次浏览 已收录 0个评论

基本概念

/*
1
运算符重载要求至少有一个是用户自定义的类型,禁止对两个标准类型重载运算符

2
运算符重载一般分为两种:对成员函数进行重载,对非成员函数进行重载
只有成员函数能重载的运算符: = () [] ->

3
C++运算符中不能重载只有五个:1、条件运算符“?:”;2、成员访问运算符“.”;3、域运算符“::”;4、长度运算符“sizeof”;5、成员指针访问运算符“->*”和“.*” 。
4
可重载的运算符分为:单目运算符,双目运算符

5
大部分运算符都是允许重载的,但不允许自己创建新的运算符,重载后的运算符优先级与原来相同

*/

代码


#include<iostream>
#include<format>
using namespace std;
class Class12_Time {
private:
    int hour;
    int minute;
    int second;
public:
    Class12_Time(int hour,int minute,int second) {
        this->hour = hour;
        this->minute = minute;
        this->second = second;
    }
    void showTime() {
        cout << format("{0:02d}:{1:02d}:{2:02d}", hour, minute, second) << endl;
    }

    Class12_Time& operator ++() { //前置++
        if (second < 59) second++;
        else second = 0, minute++;

        if (minute > 59) minute = 0, hour++;

        if (hour > 23) hour = 0;

        return *this;
    }
    Class12_Time operator ++(int) {//后置++
        Class12_Time tm(this->hour, this->minute, this->second);
        ++* this;
        return tm;
    }

    Class12_Time operator +(const Class12_Time&tm) {//重载+
        int hour = this->hour + tm.hour;
        int minute = this->minute + tm.minute;
        int second = this->second + tm.second;
        if (second >= 60)second -= 60, minute += 1;
        if (minute >= 60)minute -= 60, hour += 1;
        if (hour >= 24)hour -= 24;
        return Class12_Time(hour, minute, second);
    }

    Class12_Time operator +(const int& second) {//重载+
        Class12_Time tm(this->hour, this->minute, this->second);
        for (int i = 0; i < second; i++) ++tm;
        return tm;
    }

    //类外部可以不声明就重载,但是如果要使用其中的私有成员,必须声明友元函数
    friend string operator *(Class12_Time& tm);
};
string operator *(Class12_Time& tm) {
    return format("{0:02d}:{1:02d}:{2:02d}", tm.hour, tm.minute, tm.second);
}

int main12() {
    Class12_Time tm1(11, 22, 46);
    tm1.showTime();
    (++tm1).showTime();
    (tm1++).showTime();
    tm1.showTime();

    Class12_Time tm2(26, 54, 31);
    Class12_Time tm3 = (tm1 + tm2);
    tm3.showTime();

    (tm3 + 100).showTime();

    cout << *tm3 << endl;
    return 0;
}
喜欢 (0)
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论