Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2007, 09:28   #1
molodzo
Пользователь
 
Регистрация: 19.11.2007
Сообщений: 10
По умолчанию длинные числа

Помогите, пожалуйста, сделать хотя бы один из нижеперечисленных вопросов.

Нужно создать класс для работы с длинными числами(сложение, деление и т.д.). Класс-то я создал, а вот как сделать эти вопросы, не знаю.
Нужно:
1) определить операции ввода/вывода
2) для класса определить оператор присваивания и конструктор копирования
3) класс должен быть инициализирован целым числом - int(конструктор)

Последний раз редактировалось molodzo; 20.11.2007 в 09:36. Причина: удалить
molodzo вне форума Ответить с цитированием
Старый 20.02.2008, 21:59   #2
alexx777
Пользователь
 
Регистрация: 20.02.2008
Сообщений: 75
По умолчанию

Чтобы использовать оператор вывода класса ostream, нужно обьявить функцию ostream& operator<<(ostream& ost, BigNumber bn) другом класса:
Код:
class BigNumber{
 public:
 // Объявляем функцию другом класса.
 friend ostream& operator<<(ostream& ost, BigNumber bn);
 // другой код.
 ...
};

...

// Реализация функции:
ostream& operator<<(ostream& ost, BigNumber bn){
 // Вывод данных обьекта bn в поток ost.
 ...
 return ost;
}
Теперь можно написать
Код:
BigNumber bn;
...
std::cout << "big number: " << bn;
Точно так же и с istream.

Последний раз редактировалось alexx777; 21.02.2008 в 00:21.
alexx777 вне форума Ответить с цитированием
Старый 21.02.2008, 12:05   #3
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

имхо, лучше так (правда, получается из класса лишний оператор торчит, зато меньше друзей - меньше проблем):
Код:
class BigNumber{  
 public:  
 operator const char* () {/*Перевод данных обьекта bn в строку*/}
 // другой код.  
 ...  
};
Alek86 вне форума Ответить с цитированием
Старый 21.02.2008, 12:46   #4
alexx777
Пользователь
 
Регистрация: 20.02.2008
Сообщений: 75
По умолчанию

ostream работает только с символами типа char. Если нужно использовать символы, отличные от char, функцию нужно обьявить как шаблон:

template<class CharT, class Traits>
basic_ostream<CharT, Traits>& operator<<(basic_ostream<CharT, Traits>& ost, BigNumber bn);

Последний раз редактировалось alexx777; 21.02.2008 в 18:27.
alexx777 вне форума Ответить с цитированием
Старый 21.02.2008, 12:46   #5
alexx777
Пользователь
 
Регистрация: 20.02.2008
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Alek86 Посмотреть сообщение
имхо, лучше так (правда, получается из класса лишний оператор торчит, зато меньше друзей - меньше проблем):
Код:
class BigNumber{  
 public:  
 operator const char* () {/*Перевод данных обьекта bn в строку*/}
 // другой код.  
 ...  
};
Оператор возвращает указатель на массив, поэтому перед использованием этой строки нужно быть уверенным, что этот массив ещё существует.

Хотя для вывода на консоль вполне подойдёт и такой вариант.

Последний раз редактировалось alexx777; 21.02.2008 в 18:28.
alexx777 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Числа в строку DeDoK Общие вопросы Delphi 8 07.06.2008 00:08
ДАНЫ 4 ЧИСЛА X Y Z W составит программу найти произведение все положительные нечетные числа Woland-itn Паскаль, Turbo Pascal, PascalABC.NET 3 23.03.2008 21:49
Про числа Акашаев Нурлан Паскаль, Turbo Pascal, PascalABC.NET 6 12.12.2007 07:18
простые числа Акашаев Нурлан Паскаль, Turbo Pascal, PascalABC.NET 2 05.12.2007 12:23
Задача на длинные числы molodzo Помощь студентам 1 21.11.2007 11:23