Перегрузка ввода для собственного класса
Доброго времени суток.
Имеется собственный класс с полем char *str. Необходимо для ввода в него перегрузить >> , чтобы из потока читалось до пробела или до комбинации символов \ или \" .
Код:
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
class String
{
int len;
char *str;
public:
String(const char *s=""); //конструктор-преобразователь
const char *c_str() const { return str; } //метод
~String();//деструктор
friend istream &operator>>(istream &, String&);
friend ostream &operator<<(ostream &,const String&);
};
//Предложили сделать вот так, но или я туп, или так не получится :
istream &operator>>(istream &s, String &p)
{ char c;
return s >> c >> p.str >> c;
}
|
а как этот класс с памятью управляется? Предположим я хочу соединить 2 строки, как это сделать?
Цитата:
Цитата Glareone
//Предложили сделать вот так, но или я туп, или так не получится :
istream &operator>>(istream &s, String &p)
{ char c;
return s >> c >> p.str >> c;
} »
|
так ты загрузишь символ, указатель (16-ричное значение), символ. Это то, что нужно?
На самом деле тебе нужно сделать к своей строке функцию типа append(char), которая дописывает к ней сивол. Тогда:
Код:
// будет читать символы до первого встречного переноса строки
istream& operator>>(istream& is, String& str)
{
istreambuf_iterator<char> first(is), last;
for(; first!=last && *first!='\n'; ++first) str.append(*first);
return is;
}
// будет читать символы до первого встречного пробела или переноса строки
istream& operator>>(istream& is, String& str)
{
istreambuf_iterator<char> first(is), last;
for(; first!=last && !isspace(*first); ++first) str.append(*first);
return is;
}
выбери одно из предложенных или придумай своё сам
|
Время: 10:36.
© OSzone.net 2001-