Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Перегрузка ввода для собственного класса

Ответить
Настройки темы
C/C++ - [решено] Перегрузка ввода для собственного класса

Аватара для Glareone

Старожил


Сообщения: 281
Благодарности: 46


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: Drongo
Дата: 12-06-2010
Описание: [code] - #
Доброго времени суток.
Имеется собственный класс с полем 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;
}

-------
Имеющий глаза,да узрит, Имеющий уши,да внемлет.


Отправлено: 05:49, 12-06-2010

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


а как этот класс с памятью управляется? Предположим я хочу соединить 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;
}
выбери одно из предложенных или придумай своё сам
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:24, 12-06-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Перегрузка ввода для собственного класса

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Как сделать запрет ввода букв в поле для ввода input zvezda_t Вебмастеру 2 28-12-2009 15:52
[решено] Окно для ввода пароля SANIOK_AV AutoIt 2 18-11-2009 18:44
Интернет - Неверная раскладка в поле ввода для поиска в любом поисковике. yurfed Microsoft Windows 2000/XP 2 06-12-2008 09:12
Основы C++ | Перегрузка operator+ для m_string Skrip Программирование и базы данных 1 10-08-2005 13:41
Прога для компьютерного класса Jedi Программное обеспечение Windows 14 18-03-2004 22:21




 
Переход