Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Объект класса istreamили ostreamможно связать с другим объектом класса ostream:
cin.tie(&cout); // только для демонстрации: библиотека
// автоматически связывает объекты cin и cout
// old_tie указывает на поток (если он есть),
// в настоящее время связанный с объектом cin
ostream *old_tie = cin.tie(nullptr); // объект cin больше не связан
// связь cin и cerr; не лучшая идея, поскольку объект cin должен быть
// привязан к объекту cout
cin.tie(&cerr); // чтение в cin сбрасывает объект cerr, а не cout
cin.tie(old_tie); // восстановление обычной связи между cin и cout
Чтобы связать данный поток с новым потоком вывода, функции tie()передают указатель на новый поток. Чтобы разорвать существующую связь, достаточно передать в качестве аргумента значение 0. Каждый поток может быть связан одновременно только с одним потоком. Однако несколько потоков могут связать себя с тем же объектом ostream.
8.2. Ввод и вывод в файл
В заголовке fstreamопределены три типа, поддерживающие операции ввода и вывода в файл: класс ifstreamчитает данные из указанного файла, класс ofstreamзаписывает данные в файл, класс fstreamчитает и записывает данные в тот же файл. Использование того же файла для ввода и вывода рассматривается в разделе 17.5.3.
Эти типы поддерживают те же операции, что и описанные ранее объекты cinи cout. В частности, для чтения и записи в файлы можно использовать операторы ввода-вывода ( <<и >>), можно использовать функцию getline()(см. раздел 3.2.2) для чтения из потока ifstream. Материал, изложенный в разделе 8.1, относится также и к этим типам.
Кроме поведения, унаследованного от типа iostream, определенные в заголовке fstreamтипы имеют в дополнение члены для работы с файлами, связанными с потоком. Эти операции перечислены в табл. 8.3, они могут быть вызваны для объектов классов fstream, ifstreamили ofstream, но не других типов ввода-вывода.
Таблица 8.3. Операции, специфические для типов заголовка fstream
fstream fstrm; |
Создает несвязанный файловый поток, fstream — это один из типов, определенных в заголовке fstream |
fstream fstrm( s ); |
Создает объект класса fstream и открывает файл по имени s . Параметр s может иметь тип stringили быть указателем на символьную строку в стиле С (см. раздел 3.5.4). Эти конструкторы являются явными (см. раздел 7.5.4). Заданный по умолчанию режим файла зависит от типа fstream |
fstream fstrm( s , режим ); |
Подобен предыдущему конструктору, но открывает файл s в указанном режиме |
fstrm.open( s ) fstrm.open( s , режим ) |
Открывает файл s и связывает его с потоком fstrm. Параметр s может иметь тип stringили быть указателем на символьную строку в стиле С. Заданный по умолчанию режим файла зависит от типа fstream . Возвращает тип void |
fstrm.close() |
Закрывает файл, с которым связан поток fstrm. Возвращает тип void |
fstrm.is_open() |
Возвращает значение типа bool, указывающее, был ли связанный с потоком fstrmфайл успешно открыт и не был ли он закрыт |
8.2.1. Использование объектов файловых потоков
Когда необходимо читать или писать в файл, определяется объект файлового потока (file stream), который связывается с файлом. Каждый класс файлового потока определяет функцию-член open(), которая выполняет все системные операции, необходимые для поиска указанного файла и его открытия для чтения или записи.
При создании файлового потока можно (но не обязательно) указать имя файла. При предоставлении имени файла функция open()вызывается автоматически:
ifstream in(ifile); // создать объект ifstream и открыть указанный файл
ofstream out; // файловый поток вывода, не связанный с файлом
Этот код определяет inкак входной поток, инициализированный для чтения из файла, указанного строковым аргументом ifile. Код определяет outкак поток вывода, который еще не связан с файлом. По новому стандарту имена файлов могут быть переданы как в переменной библиотечного типа string, так и в символьном массиве в стиле С (см. раздел 3.5.4). Предыдущие версии библиотеки допускали только символьные массивы в стиле С.
fstreamвместо iostream&Как упоминалось в разделе 8.1, объект производного типа можно использовать в тех местах, где ожидается объект базового типа. Благодаря этому факту функции, получающие ссылку (или указатель) на один из типов iostream, могут быть вызваны от имени соответствующего типа fstream(или sstream). Таким образом, если имеется функция, получающая ссылку ostream&, то ее можно вызвать, передав объект типа ofstream, то же относится к ссылке istream&и типу ifstream.
Например, функции read()и print()(см. раздел 7.1.3) можно использовать для чтения и записи в именованный файл. В этом примере подразумевается, что имена файлов ввода и вывода передаются как аргументы функции main()(см. раздел 6.2.5):
ifstream input (argv[1]); // открыть файл транзакций продаж
ofstream output(argv[2]); // открыть файл вывода
Sales_data total; // переменная для хранения текущей суммы
if (read(input, total)) { // прочитать первую транзакцию
Sales_data trans; // переменная для хранения данных следующей
// транзакции
while(read(input, trans)) { // читать остальные транзакции
if (total.isbn() == trans.isbn()) // проверить isbn
total.combine(trans); // обновить текущую сумму
else {
print(output, total) << endl; // отобразить результат
total = trans; // обработать следующую книгу
}
}
print (output, total) << endl; // отобразить последнюю транзакцию
} else // ввода нет
cerr << "No data?!" << endl;
Кроме использования именованных файлов, этот код практически идентичен версии программы сложения, приведенной в разделе 7.1.1. Важнейшая часть — вызов функций read()и print(). Этим функциям можно передать объекты типа fstream, хотя типами их параметров определены istream&и ostream&соответственно.
open()и close()Когда определяется пустой объект файлового потока, вызвав функцию open(), его впоследствии можно связать с файлом:
Интервал:
Закладка: