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;
}

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

  • 重载操作符至少有一个类类型或者枚举类型操作数
  • 重载操作符不保证操作数的求值顺序,例如 重载&&||就没有短路特性
  • 重载操作符与原操作符的优先级,结合性,操作数目均相同
posted @ 2018-10-08 21:00  弱冠  阅读(168)  评论(0编辑  收藏  举报