38 C++基础-重载一元和二元运算符

本文通过实例介绍C++中重载双目运算符(如==)及单目运算符(如++)。展示了如何在自定义类CTime中实现这些运算符,用于比较时间和进行时间增量操作。

1. 重载双目运算符

例如一个 == 的demo

  • 调用如下
#include "Time.h"
#include "Date.h"
#include <iostream>

using namespace std;

int main() {

    CTime time1(12, 12, 12);
    CTime time2(12, 12, 12);

    bool bRet = time1 == time2;
    cout<<"Result = "<<bRet<<endl;

    return 0;
}
  • 头文件
#ifndef TIME_H
#define TIME_H

class CTime{
public:

    CTime(int hour, int minute, int second);

    // 双目运算符
    bool operator== (CTime& time);


private:
    int m_nHour;
    int m_nMinute;
    int m_nSecond;
};

#endif
  • 实现类
#include <iostream>
#include "Time.h"

using namespace std;

CTime::CTime(int hour, int minute, int second) {
    m_nHour = hour;
    m_nMinute = minute;
    m_nSecond = second;
}

bool CTime::operator==(CTime& time){
    if(m_nHour == time.m_nHour
        && m_nMinute == time.m_nMinute
        && m_nSecond == time.m_nSecond) {

        return true;
    }

    return false;
}

2. 单目运算符

这里已自增运算符为例

  • 调用实现
#include "Time.h"
#include "Date.h"
#include <iostream>

using namespace std;

int main() {

    CTime time(1, 1, 1);

    time ++;

    // Hour:1 Minute:1 Second:2
    cout<<"Hour:"<<time.getHour()<<" Minute:"<<time.getMinute()<<" Second:"<<time.getSecond()<<endl;


    return 0;
}
  • 头文件定义
#ifndef TIME_H
#define TIME_H

class CTime{
public:

    CTime(int hour, int minute, int second);

    CTime operator+(CTime time);

    CTime operator++();

    // 区分后置
    CTime operator++(int);

    int getHour();

    int getMinute();

    int getSecond();
private:
    int m_nHour;
    int m_nMinute;
    int m_nSecond;
};

#endif
  • 类的实现
#include <iostream>
#include "Time.h"

using namespace std;

CTime::CTime(int hour, int minute, int second) {
    m_nHour = hour;
    m_nMinute = minute;
    m_nSecond = second;
}
int CTime::getHour(){
    return m_nHour;
}

int CTime::getMinute(){
    return m_nMinute;
}

int CTime::getSecond(){
    return m_nSecond;
}


CTime CTime::operator+(CTime time){
    m_nHour = m_nHour + time.m_nHour;
    m_nMinute = m_nMinute + time.m_nMinute;
    m_nSecond = m_nSecond + time.m_nSecond;
    return *this;
}

CTime CTime::operator++(){
    CTime time(0, 0, 1);
    *this = *this + time;
    return *this;
}

// 区分后置
CTime CTime::operator++(int){
    CTime time(*this);
    CTime time2(0, 0, 1);
    *this = *this + time2;
    return *this;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值