Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Перегрузка ввода для собственного класса (http://forum.oszone.net/showthread.php?t=177983)

Glareone 12-06-2010 05:49 1432604

Перегрузка ввода для собственного класса
 
Доброго времени суток.
Имеется собственный класс с полем 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;
}


pva 12-06-2010 09:24 1432625

а как этот класс с памятью управляется? Предположим я хочу соединить 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.

Время: 10:36.
© OSzone.net 2001-