- •Содержание
- •ВВЕДЕНИЕ
- •1.ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД
- •2. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
- •2.1. Абстрактные типы данных
- •2.2. Базовые принципы объектно-ориентированного программирования
- •2.3. Основные достоинства языка С++
- •2.4. Особенности языка С++
- •2.4.1. Ключевые слова
- •2.4.2. Константы и переменные
- •2.4.3. Операции
- •2.4.4. Типы данных
- •2.4.5. Передача аргументов функции по умолчанию
- •2.5.1. Объект cin
- •2.5.2. Объект cout
- •2.5.3. Манипуляторы
- •3.1. Объекты
- •3.2. Понятие класса
- •3.3. Конструктор копирования
- •3.4. Конструктор explicit
- •3.5. Указатель this
- •3.6. Встроенные функции (спецификатор inline)
- •3.7. Организация внешнего доступа к локальным компонентам класса (спецификатор friend)
- •3.8. Вложенные классы
- •3.9. Static-члены (данные) класса
- •3.10. Компоненты-функции static и const
- •3.11. Proxi-классы
- •3.12. Ссылки
- •3.12.1. Параметры ссылки
- •3.12.2. Независимые ссылки
- •3.13. Пространства имен
- •3.13.3. Ключевое слово using как объявление
- •3.13.4. Псевдоним пространства имен
- •3.14. Практические приемы ограничения числа объектов класса
- •4. НАСЛЕДОВАНИЕ
- •4.1.1. Конструкторы и деструкторы при наследовании
- •4.2. Виртуальные функции
- •4.3. Абстрактные классы
- •4.4. Виртуальные деструкторы
- •4.6. Виртуальное наследование
- •5.2. Перегрузка операторов
- •5.2.2. Перегрузка унарного оператора
- •5.2.3. Дружественная функция operator
- •5.2.4. Особенности перегрузки операции =
- •5.2.5. Перегрузка оператора []
- •5.2.6. Перегрузка оператора ()
- •5.2.7. Перегрузка оператора ->
- •5.2.8. Перегрузка операторов new и delete
- •5.3. Преобразование типа
- •5.3.1. Явные преобразования типов
- •6. ШАБЛОНЫ
- •6.1. Параметризированные классы
- •6.2. Передача в шаблон класса дополнительных параметров
- •6.3. Шаблоны функций
- •6.4. Совместное использование шаблонов и наследования
- •6.5. Шаблоны класса и friend-функции
- •6.6. Некоторые примеры использования шаблона класса
- •6.6.1. Реализация smart-указателя
- •6.6.2. Задание значений параметров класса по умолчанию
- •7.2. Состояние потока
- •7.3. Строковые потоки
- •7.4. Организация работы с файлами
- •7.5. Организация файла последовательного доступа
- •7.6. Создание файла произвольного доступа
- •7.7. Основные функции классов ios, istream, ostream
- •8. ИСКЛЮЧЕНИЯ В С++
- •8.2. Перенаправление исключительных ситуаций
- •8.3. Исключительная ситуация, генерируемая оператором new
- •8.6. Спецификации исключительных ситуаций
- •8.7. Задание собственного неожиданного обработчика
- •9. СТАНДАРТНАЯ БИБЛИОТЕКА ШАБЛОНОВ (STL)
- •9.3. Категории итераторов
- •9.4. Операции с итераторами
- •9.5. Контейнеры последовательностей
- •9.5.2. Контейнер последовательностей list
- •9.5.3. Контейнер последовательностей deque
- •9.6. Ассоциативные контейнеры
- •9.6.1. Ассоциативный контейнер multiset
- •9.6.2. Ассоциативный контейнер set
- •9.6.3. Ассоциативный контейнер multimap
- •9.7.1. Адаптер stack
- •9.7.2. Адаптер queue
- •9.7.3. Адаптер priority_queue
- •9.8. Алгоритмы
- •9.8.1. Алгоритмы сортировки sort, partial_sort, sort_heap
- •9.8.2. Алгоритмы поиска find, find_if, find_end, binary_search
- •9.8.3. Алгоритмы fill, fill_n, generate и generate_n
- •9.8.4. Алгоритмы equal, mismatch и lexicographical_compare
- •9.8.6. Алгоритмы работы с множествами
- •9.8.7. Алгоритмы swap, iter_swap и swap_ranges
- •9.8.8. Алгоритмы copy, copy_backward, merge, unique и reverse
- •10. ПРИМЕРЫ РЕАЛИЗАЦИИ КОНТЕЙНЕРНЫХ КЛАССОВ
- •10.1. Связанные списки
- •10.1.1. Реализация односвязного списка
- •10.2. Реализация бинарного дерева
- •11. ПРОГРАММИРОВАНИЕ ДЛЯ WINDOWS
- •11.1. Система, управляемая сообщениями
- •11.2. Управление графическим выводом
- •11.3. Контекст устройства
- •11.3.1. Экран
- •11.3.2. Принтер
- •11.3.3. Объект в памяти
- •11.3.4. Информационный контекст
- •11.4. Архитектура, управляемая событиями
- •11.5. Исходный текст программы
- •11.7. Некоторые новые типы данных
- •11.8. Венгерская нотация
- •11.9. Точка входа программы
- •11.11. Создание окна
- •11.12. Цикл обработки сообщений
- •11.13. Оконная процедура
- •11.14. Обработка сообщений
- •11.15. Обработка сообщений функцией DefWindowProc
- •11.16. Синхронные и асинхронные сообщения
- •11.17. Еще один метод получения описателя контекста устройства
- •11.19. Полосы прокрутки
- •Литература
}
7.7. Основные функции классов ios, istream, ostream
Из диаграммы классов ввода−вывода следует, что классы ios, istream, ostream являются базовыми для большинства классов. Класс ios является типом- синонимом для шаблона класса basic_ios, производным от класса ios_base.
template <class E, class T = char_traits<E> > |
|
|
|
|
||||||||||||
class basic_ios : public ios_base |
|
|
|
|
|
|
||||||||||
{public: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Р |
|
|
iostate rdstate() const; |
|
|
|
// возвращает текущее состояние потока |
|||||||||||
|
void clear(iostate state = goodbit); // устанавливает состояние потока в |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
И |
|
|
|
|
|
|
|
|
|
|
|
|
// заданное значение. Состояние потока |
|||||
|
|
|
|
|
|
|
|
|
|
|
// можно изменить: cin.clear(ios::eofbit) |
|||||
|
void setstate(iostate state); |
|
|
|
|
У |
|
|||||||||
|
|
|
|
|
|
|
|
|||||||||
|
bool good() const; |
// |
true-значение при отсутствии ошибки |
|
|
|||||||||||
|
bool eof() const; |
|
// |
true |
|
|
|
|
Г |
|
|
|||||
|
|
|
при достижении конца файла, т.е. при попыт- |
|||||||||||||
|
|
|
|
|
|
|
// |
ке выполнить ввод−вывод за пределами файла |
||||||||
|
bool fail() const; |
|
// |
true |
|
|
|
Б |
|
|
|
|||||
|
|
при ошибке в текущей операции |
|
|
||||||||||||
|
bool bad() const; |
|
// |
true |
при ошибке |
|
|
|
|
|||||||
|
basic_ostream<E, T> *tie() const; |
|
|
|
|
|
||||||||||
|
basic_ostream<E, T> *tie(basic_ostream<E, T> *str); |
|
|
|
||||||||||||
|
basic_streambuf<E, T> *rdbuf() const; // возвр щает указатель на буфер |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
е |
а// ввода−вывода |
|
|
||
|
basic_streambuf<E, T> *rdbuf(basicкstreambuf<E, T> *sb); |
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
т |
|
|
|
|
|
||
|
basic_ios& copyfmt(const basic ios& rhs); |
|
|
|
|
|||||||||||
|
locale imbue(const locale& loc); |
|
|
|
|
|
||||||||||
|
E widen(char ch); |
|
о |
|
|
|
|
|
|
|||||||
|
|
|
|
|
и |
|
|
|
|
|
|
|
|
|||
|
char narrow(E ch, char dflt); |
|
|
|
|
|
|
|||||||||
protected: |
|
л |
|
|
|
|
|
|
|
|
|
|
||||
|
basic_ios(); |
|
|
|
|
|
|
|
|
|
|
|
|
|||
}; |
void init(basic streambuf<E, T>* sb); |
|
|
|
|
|
||||||||||
при |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
Далее |
|
водятся прототипы некоторых функций классов istream и |
||||||||||||||
Б |
б |
|
|
|
|
|
|
|
|
|
|
|
|
|||
ostream. |
|
|
|
|
|
|
|
|
|
|
|
|
|
template <class E, class T = char_traits<E> >
class basic_istream : virtual public basic_ios<E, T> {public:
bool ipfx(bool noskip = false); void isfx();
streamsize gcount() const; int_type get(); basic_istream& get(E& c);
basic_istream& get(E *s, streamsize n);
162
basic_istream& get(E *s, streamsize n, E delim); basic_istream& get(basic_streambuf<E, T> *sb); basic_istream& get(basic_streambuf<E, T> *sb, E delim);
basic_istream& getline(E *s, streamsize n)E |
|
|
||||||
basic_istream& getline(E *s, streamsize n, E delim); |
|
|||||||
basic_istream& ignore(streamsize n = 1, |
// пропускает n символов или |
|||||||
|
|
int_type delim = T::eof()); // завершается при считывании |
||||||
|
|
|
|
|
|
// заданного ограничителя по |
||
|
|
|
|
|
|
// умолчанию − EOF |
||
int_type peek(); |
|
// читает символ из потока, не удаляя его из потока |
||||||
basic_istream& read(E *s, streamsize n); // неформатированный ввод |
||||||||
streamsize readsome(E *s, streamsize n); |
|
|
|
|||||
basic_istream& putback(E c);// возвращает обратно в потокРпредыдущий |
||||||||
|
|
|
// символ, полученный из потока функцией get |
|||||
basic_istream& unget(); |
|
|
|
|
И |
|||
pos_type tellg(); |
|
|
|
|
|
У |
||
basic_istream& seekg(pos_type pos); |
|
|
||||||
|
|
|
|
|||||
basic_istream& seekg(off_type off, ios base::seek_dir way); |
||||||||
int sync(); |
|
|
|
|
Г |
|
||
|
|
|
Б |
|
|
|||
}; |
|
|
|
|
|
|
||
template <class E, class T = char traits<E> > |
|
|
||||||
class basic_ostream : virtual public basic_ios<E, T> |
|
|||||||
{public: |
|
|
|
а |
|
|
|
|
|
|
к |
|
|
|
|
||
bool opfx(); |
|
|
|
|
|
|||
|
е |
|
|
|
|
|
||
void osfx(); |
|
|
|
|
|
|
||
basic_ostream& put(E c); |
|
|
|
|
|
|||
basic_ostream& write(E *s, streamsize n); |
// неформатированный вывод |
|||||||
basic_ostream&тflush(); |
|
|
|
|
|
|||
pos type tellp();о |
|
|
|
|
|
|
||
basic |
ostream& seekp(pos_type pos); |
|
|
|
||||
basic |
и |
|
|
|
|
|
|
|
ostream& seekp(off_type off, ios_base::seek_dir way); |
||||||||
}; л |
|
|
|
|
|
|
|
|
б |
|
|
|
|
|
|
|
|
Вопросы и упражнения для закрепления материала |
||||||||
1. Создайте определенный пользователем класс Point, который содержит |
||||||||
и |
|
|
|
|
|
|
|
|
скрытые компоненты-данные xCoord и yCoord и объявляет перегруженные |
||||||||
Бфункции-операторы «взять из потока» и «поместить в поток» как дружествен- |
||||||||
ные функции класса. |
|
|
|
|
|
|
|
|
2. Напишите функцию main, которая проверяет ввод и вывод определен- |
ного пользователем класса Point c помощью перегруженных операций «взять из потока» и «поместить в поток».
3. Напишите программу, демонстрирующую, что функция get оставляет символ-ограничитель во входном потоке, а getline извлекает его из потока и от-
163