c ++泛型运算符重载

时间:2014-10-17 06:19:23

标签: c++ overloading

如何使用运算符重载来添加两个对象而不使其成为任何对象的成员?这与插入操作符重载有关吗?

所以不是这样,使用更通用的东西,即用于任何对象?:

sameObjectType operator + ( const sameObjectType  &x,  const sameObjectType &y ) {
    sameObjectType z;
    z = x+y;

    return z;
}

// I want to do the same for subtraction operatoR

sameObjectType operator - ( const sameObjectType  &x,  const sameObjectType &y ) {
    sameObjectType z;
    z = x-y;

    return z;
}

1 个答案:

答案 0 :(得分:0)

您可以从此示例代码中获得想法。

#include <iostream>
class One {
private:
 int num1, num2;

public:
  One(int num1, int num2) : num1(num1), num2(num2) {}
  One& operator += (const One&);
  friend bool operator==(const One&, const One&);
  friend std::ostream& operator<<(std::ostream&, const One&);
};

std::ostream&
 operator<<(std::ostream& os, const One& rhs) {
   return os << "(" << rhs.num1 << "@" << rhs.num2 << ")";
 }

One& One::operator+=(const One& rhs) {
  num1 += rhs.num1;
  num2 += rhs.num2;
  return *this;
}

One operator+(One lhs, const One &rhs)
{
 return lhs+=rhs;
}

 int main () {
 One x(1,2), z(3,4);
 std::cout << x << " + " << z << " => " << (x+z) << "\n";
 }