我正在尝试修改Add函数以表示操作符重载。
#include <iostream>
using namespace std;
template <class T>
class cpair
{
public:
cpair(T x = 0, T y = 0) { A = x; B = y; }
void print()
{
cout << A << " " << B << endl;
}
T A, B;
};
template <class T>
void Add(cpair<T> A1, cpair<T> A2, cpair<T> &R)
{
R.A = A1.A + A2.A;
R.B = A1.B + A2.B;
}
int main()
{
cpair<int> A1(4, 5), A2(1, 3), result;
Add(A1, A2, result);
result.print();
return 0;
}
我正在学习运算符重载,但是我认为我没有正确实现它。我得到的错误是:
“ operator =必须是成员函数”。
template <class T>
void operator=(const cpair<T> &A1, cpair<T> &A2, cpair<T> &R) {
R.A = A1.A + A2.A;
R.B = A1.B + A2.B;
}
int main()
{
cpair<int> A1(4, 5), A2(1, 3), result;
operator(A1, A2, result);
result.print();
}
如何修改Add函数以表示运算符重载,然后在Main中调用该函数?谢谢。
答案 0 :(得分:2)
您似乎误会了很多。首先,如果您想重载加法运算符,那么您需要重载的是operator+
函数,而不是赋值运算符。
要解决此问题,您应该执行例如
template <class T>
cpair<T> operator+(cpair<T> const& a, cpair<T> const& b)
{
return cpair<T>(a.A + b.A, a.B + b.B);
}
第二,如果您重载运算符,则可以像使用它一样使用它。例如,例如
int a = 5, b = 7, r;
那你就要做
r = a + b;
与重载的运算符相同:
cpair<int> a(4, 5), b(1, 3), result;
result = a + b;
如果您想了解更多信息,建议您get a few good books to read。
答案 1 :(得分:0)
template <class T>
class cpair {
public:
cpair& operator+=( cpair const& o )&{
A+=o.A;
B+=o.B;
return *this;
}
friend cpair operator+( cpair lhs, cpair const& rhs ){
lhs+=rhs;
return lhs;
}
//...
以上是在模板类上覆盖+
的规范方法。