Как перегрузить оператор ввода с использованием getline?
К примеру есть класс Person с перегруженными операторами ввода и вывода.
class Person
{
public:
Person()
{
name = "Empty";
age = 0;
}
Person(string name, int age)
{
this->name = name;
this->age = age;
}
friend ostream& operator << (ostream& out, Person& obj)
{
return out << setw(10) << obj.name << setw(5) << obj.age << endl;
}
friend istream& operator >> (istream& in, Person& obj)
{
return in >> obj.name >> obj.age;
}
private:
string name;
int age;
};
Я записываю данные в файл с помощью fstream
Person st("Name Surname", 66);
fstream fs;
fs.open("person.txt", fstream::in | fstream::out | fstream::app);
fs << st;
Далее я хочу извлечь данные из файла
while (true)
{
Person temp;
fs >> temp;
if (fs.eof())
{
break;
}
cout << temp;
}
Проблема в том, что при вводе string, если ввожу так "Name Surname", т.е с пробелом между, то появляется сбой. Я пытался перегрузить >> с использованием getline:
friend istream& operator >> (istream& in, Person& obj)
{
getline(in, obj.name);
in >> obj.age;
return in;
}
Но корректно извлечь не удалось. Каким образом следует перегрузить оператор ввода для корректной работы string с файлами?
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
вот где то так
friend istream& operator >> (istream& in, Person& obj)
{
std::string lastname, firstname;
in >> lastname >> firstname >> obj.age;
obj.name = lastname + " " + firstname;
return in;
}
Если вдруг имя-фамилия будут состоять из трех и более слов, то тут придется выдумывать.