C++基础——运算符重载

  • 重载语法

    opreator+(type value)

  • 重载示例

    // heavy load example
    #include <iostream>
    
    using namespace std;
    
    namespace mytime {
        class Time
        {
        private:
            int hours;
            int minutes;
        public:
            Time() {
                hours = minutes = 0;
            }
    
            Time(int h, int m = 0) {
                hours = h;
                minutes = m;
            }
            ~Time() {
    
            }
            void AddMin(int m) {
                minutes += m;
                hours += minutes / 60;
                minutes %= 60;
            }
    
            void AddHr(int h) {
                hours += h;
            }
            void Reset(int h, int m) {
                hours = h;
                minutes = m;
            }
    
            /* 加法成员函数 */
            Time Sum(const Time & t) const {
                Time sum;
                sum.minutes = minutes + t.minutes;
                sum.hours = hours + t.hours + sum.minutes / 60;
                sum.minutes %= 60;
                return sum;
                /* 不要返回指向局部变量或临时对象的引用。
                 * 函数执行完毕 ,局部变量和临时对象将消失,引用将指向不存在的数据
                 */
            }
    
            /* 重载加法运算符:*/
            Time operator+(const Time &t) const {
                Time sum;
                sum.minutes = minutes + t.minutes;
                sum.hours = hours + t.hours + sum.minutes / 60;
                sum.minutes %= 60;
                return sum;
                /* 不要返回指向局部变量或临时对象的引用。
                 * 函数执行完毕 ,局部变量和临时对象将消失,引用将指向不存在的数据
                 */
            }
            void Show() const {
                cout << hours << " hours," << minutes << " minutes\n";
            }
        };
    }
    
    int main() {
        mytime::Time t1(2, 40);
        t1.Show();
    
        mytime::Time t2(3, 20);
        mytime::Time t3 = t1 + t2;
        t3.Show();
        return 0;
    }
    
  • 重载限制

  1. 重载后的运算符必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载运算符。

  2. 使用运算符时不能违反运算符原来的句法规则。例如,不能将求模运算符(%)重载成使用一个操作数,.不能修改运算符的优先级。

  3. 不能创建新的运算符

  4. 不能重载运算符列表
    .:成员访问运算符
    .*:成员指针访问运算符
    :::作用域运算符
    sizeof:长度运算符
    ?::条件运算符
    #: 预处理符号
    typeid: 一个RTTI运算符
    const_cast: 强制类型转换运算符
    dynamic_cast: 强制类型转换运算符
    reinterpret_cast: 强制类型转换运算符
    static_cast: 强制类型转换运算符

  5. 只允许成员函数进行重载的运算符

    =: 赋值操作符

    (): 函数调用运算符

    []:下表运算符

    ->:通过指针访问类成员的运算符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值