Не работает перегруженный оператор >> для шаблона класса
Имеется заготовка для класса четырёхугольников. Работает ввод сторон этого четырёхугольника с помощью перегруженного оператора >> , но после окончания ввода данные будто не сохраняются, т.е. остаются значения от конструктора по умолчанию (в данном случае 0). Не понятно почему так происходит, причём значения обнуляются именно по окончании ввода.
#include <iostream>
#include "Array.h"
template<class T>
class Rect
{
private:
T m_left, m_top;
T m_right, m_bottom;
public:
Rect(): m_left(0), m_right(0), m_top(0), m_bottom(0){}
Rect(T left, T right, T top, T bottom): m_left(left), m_right(right), m_top(top), m_bottom(bottom) {}
Rect(const Rect &R): m_left(R.m_left), m_right(R.m_right), m_top(R.m_top), m_bottom(R.m_bottom) {}
~Rect() {}
Rect& operator=(const Rect& R){
m_left = R.m_left;
m_right = R.m_right;
m_top = R.m_top;
m_bottom = R.m_bottom;
return *this;
}
template <class T> friend istream& operator>>(istream& is, Rect<T> R);
template <class T> friend ostream& operator<<(ostream& os, const Rect<T> R);
};
int main() {
setlocale(LC_ALL, "Russian");
//Array<Rect<int>> a(1);
Rect<int> R;
cin >> R;
cout << R;
return 0;
}
template<class T>
istream& operator>>(istream& is, Rect<T> R) {
puts("Введите левую сторону: ");
is >> R.m_left;
puts("Введите верхнюю сторону: ");
is >> R.m_top;
puts("Введите правую сторону: ");
is >> R.m_right;
puts("Введите нижнюю сторону: ");
is >> R.m_bottom;
return is;
}
template<class T>
ostream& operator<<(ostream& os, const Rect<T> R) {
os << "Верхняя сторона: " << R.m_top;
return os;
}
Ответы (1 шт):
Автор решения: erzyadev
→ Ссылка
Вы передаёте Rect<T> по значению, из-за чего вы записываете во временную копию.
Замените сигнатуру на
template<class T>
istream& operator>>(istream& is, Rect<T> &R)