c++泛型运算符重载

c++ generic operator overload

本文关键字:重载 运算符 泛型 c++      更新时间:2023-10-16

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

因此,与其这样,不如使用更通用的东西,即与任何对象一起使用?:

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

您可以从这个示例代码中获得这个想法

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