2014-10-17 4 views
0

Как я могу использовать перегрузку оператора для добавления двух объектов, не делая его членом какого-либо объекта? Это как-то связано с перегрузкой оператора вставки?C++ generic overload оператора

так вместо этого использовать что-то более общее, т.е. для использования с любыми объектами ?:

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

Примечание: проблема с 'z = x + y;' в вашей 'operator +' перегрузке. Как вы думаете, 'x + y' будет рассчитан? Его намерение вызвать перегрузку оператора, вы уже напуганы в середине уже. т. е. ваш оператор бесконечно рекурсивный. – WhozCraig

ответ

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"; 
} 
+0

Я видел этот код, проблема в том, что я только инициализирую и вызываю ссылку Object. Объект newObject; newObject (1,2,3); cout << newObject + newObject; –

+0

Один оператор + (один lhs, const One & rhs) { return lhs + = rhs; } см. Это нет const с 1-м параметром функции –

+0

это означает, что значение первого объекта не является постоянным. –