У меня просто быстрый вопрос. Мне нужно переопределить оператор >> для пользовательского класса String, и я не могу понять, как это сделать.
Я знаю, что этот код работает, потому что это был мой оригинальный метод решения проблемы:
istream& operator>>(istream &is, String &s) {
char data[ String::BUFF_INC ]; //BUFF_INC is predefined
is >> data;
delete &s;
s = data;
return s;
}
Однако, согласно спецификации (это домашнее задание), мне нужно читать по 1 символам за раз, чтобы вручную проверять наличие пробелов и убедиться, что строка не слишком велика для данных []. Поэтому я изменил свой код на следующее:
istream& operator>>(istream &is, String &s) {
char data[ String::BUFF_INC ];
int idx = 0;
data[ 0 ] = is.get();
while( (data[ idx ] != *String::WHITESPACE) && !is.ios::fail() ) {
++idx;
is.get();
data[ idx ] = s[ idx ];
}
return is;
}
Когда этот новый код выполняется, он просто застревает в цикле пользовательского ввода. Итак, как мне использовать is.get (), чтобы читать данные за символом, но не ждать ввода данных пользователем? Или, может быть, я должен использовать что-то другое, чем .get ()?