Перегрузка оператора шаблоном - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь изменить функцию 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;
}

Я изучаю перегрузку операторов, но не думаю, что реализовал это правильно. Я получаю ошибку:

'оператор = должен быть функцией-членом'.

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? Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018
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;
  }
//...

приведенный выше канонический способ переопределить + в классе шаблона.

0 голосов
/ 06 сентября 2018

Похоже, вы очень сильно неправильно понимаете. Прежде всего, если вы хотите перегрузить оператор сложения, вам нужно перегрузить функцию 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;

Если вы хотите узнать больше, я предлагаю вам взять несколько хороших книг для чтения .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...