• C++操作符重载


    C++操作符重载

    下面举个简单的例子介绍重载操作符

    #include <iostream>
    class A
    {
        friend std::istream &operator>>(std::istream &, A &);
        friend std::ostream &operator<<(std::ostream &, const A &);
    
      public:
        A() : num(0) {}
        A(int n) : num(n) {}
        A &operator+=(const A &);
        A operator+(const A&);
    
      private:
        int num;
    };
    

    这里定义了一个A类,构造函数有两个

    重载操作符需要定义重载函数,与一般函数相似,
    重载函数需要有返回值,形参列表。
    一般而言,重载操作符的操作元素个数应该与形参列表一致,
    本例中因为存在隐含的this参数,所以少一个。

    这里给出++=的重载函数定义

    
    A A::operator+(const A&a)
    {
        return A(num+a.num);
    }
    
    A &A::operator+=(const A &other)
    {
        num += other.num;
        return *this;
    }
    

    当友元需要通过操作符来操作对象时,也可以重载

    std::istream &operator>>(std::istream &in, A &a)
    {
        in >> a.num;
        if (!in)
            a.num = 0;
        return in;
    }
    
    std::ostream &operator<<(std::ostream &out, const A &a)
    {
        out << a.num;
        return out;
    }
    

    通过下面代码测试功能

    #include "A.hpp"
    
    int main()
    {
        A a1;
        A a2;
    
        std::cin >> a1 >> a2;
    
        a1 += a2;
    
        a1.operator+=(a2);
    
        std::cout << a1 << std::endl;
    
        std::cout << a1 + a2 << std::endl;
    
        return 0;
    }
    

    重载操作符有几点需要注意的

    • 重载操作符至少有一个类类型或者枚举类型操作数
    • 重载操作符不保证操作数的求值顺序,例如 重载&&||就没有短路特性
    • 重载操作符与原操作符的优先级,结合性,操作数目均相同
  • 相关阅读:
    Jzoj5422 天才绅士少女助手克里斯蒂娜
    Jzoj5422 天才绅士少女助手克里斯蒂娜
    Jzoj5421 嘟嘟噜
    Jzoj5421 嘟嘟噜
    Jzoj5460【NOIP2017提高A组冲刺11.7】士兵训练
    Jzoj5460【NOIP2017提高A组冲刺11.7】士兵训练
    Jzoj5459【NOIP2017提高A组冲刺11.7】密室
    PAT甲级——A1046 Shortest Distance
    PAT甲级——A1045 Favorite Color Stripe
    PAT甲级——A1044 Shopping in Mars
  • 原文地址:https://www.cnblogs.com/kwebi/p/9757127.html
Copyright © 2020-2023  润新知