Перегрузка операторов ввода/вывода
Надо перегрузить операторы ввода/вывода в поток. Пробую так:
class Parallelepiped
{
public:
// ширина
float width;
// высота
float height;
// длина
float length;
float volume() const
{
return width * height * length;
}
istream& operator>>(istream& in)
{
in >> width;
in >> height;
in >> length;
return in;
}
ostream& operator<<(ostream& out) const
{
return out << width << height << length;
}
};
И не получается...
Ошибка C2679 бинарный ">>": не найден оператор, принимающий правый операнд типа "Parallelepiped" (или приемлемое преобразование отсутствует)
Ошибка C2679 бинарный "<<": не найден оператор, принимающий правый операнд типа "Parallelepiped" (или приемлемое преобразование отсутствует)
Что не так? Видел примеры когда оператор выносится из класса, либо как дружественная функция, но в задании сказано сделать методом.
Ответы (1 шт):
Просто вы все сделали для того, чтобы работал такой код:
Parallelepiped p;
p >> cin;
p << cout;
Проверьте, убедитесь...
Чтобы работало так, как вы хотите - надо объявить операторы вне класса:
istream& operator>>(istream& in, Parallelepiped& p)
{
in >> p.width;
in >> p.height;
in >> p.length;
return in;
}
ostream& operator<<(ostream& out, const Parallelepiped& p)
{
return out << p.width << p.height << p.length;
}
Оператор - член класса требует, чтобы первым в выражении был объект класса.