Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
#include
#include "Sales_item.h"
int main() {
Sales_item item1, item2;
std::cin >> item1 >> item2; // прочитать две транзакции
std::cout << item1 + item2 << std::endl; // отобразить их сумму
return 0;
}
Если ввести следующие данные:
0-201-78345-X 3 20.00
0-201-78345-X 2 25.00
то вывод будет таким:
0-201-78345-X 5 110 22
Программа начинается с включения заголовков Sales_item
и iostream
. Затем создаются два объекта ( item1
и item2
) класса Sales_item
, предназначенные для хранения транзакций. В эти объекты читаются данные со стандартного устройства ввода. Выражение вывода суммирует их и отображает результат.
Обратите внимание: эта программа очень похожа на программу, приведенную в разд 1.2: она читает два элемента данных и отображает их сумму. Отличаются они лишь тем, что в первом случае суммируются два целых числа, а во втором — два объекта класса Sales_item
. Кроме того, сама концепция "суммы" здесь различна. В случае с типом int
получается обычная сумма — результат сложения двух числовых значений. В случае с объектами класса Sales_item
используется концептуально новое понятие суммы — результат сложения соответствующих компонентов двух объектов класса Sales_item
.
Неоднократный ввод этих транзакций при проверке программы может оказаться утомительным. Большинство операционных систем поддерживает перенаправление файлов, позволяющее ассоциировать именованный файл со стандартным устройством ввода и стандартным устройством вывода:
$ addItems outfile
Здесь подразумевается, что $
— это системное приглашение к вводу, а наша программа суммирования была откомпилирована в исполняемый файл addItems.exe
(или addItems
на системе UNIX). Эта команда будет читать транзакции из файла infile
и записывать ее вывод в файл outfile
в текущем каталоге.
Упражнение 1.20. По адресу http://www.informit.com/title/032174113
в каталоге кода первой главы содержится копия файла Sales_item.h
. Скопируйте этот файл в свой рабочий каталог и используйте при написании программы, которая читает набор транзакций проданных книг и отображает их на стандартном устройстве вывода.
Упражнение 1.21. Напишите программу, которая читает два объекта класса Sales_item
с одинаковыми ISBN и вычисляет их сумму.
Упражнение 1.22. Напишите программу, читающую несколько транзакций с одинаковым ISBN и отображающую сумму всех прочитанных транзакций.
1.5.2. Первый взгляд на функции-члены
Программа суммирования объектов класса Sales_item
должна проверять наличие у этих объектов одинаковых ISBN. Сделаем это так:
#include
#include "Sales_item.h"
int main() {
Sales_item item1, item2;
std::cin >> item1 >> item2;
// сначала проверить, представляют ли объекты item1 и item2
// одну и ту же книгу
if (item1.isbn() == item2.isbn()) {
std::cout << item1 + item2 << std::endl;
return 0; // свидетельство успеха
} else {
std::cerr << "Data must refer to same ISBN"
<< std::endl;
return -1; // свидетельство отказа
}
}
Различие между этой программой и предыдущей версией в операторе if
и его ветви else
. Даже не понимая смысла условия оператора if
, вполне можно понять, что делает эта программа. Если условие истинно, вывод будет, как прежде, и возвратится значение 0
, означающее успех. Если условие ложно, выполняется блок ветви else
, который выводит сообщение об ошибке и возвращает значение -1
.
Условие оператора if
вызывает функцию-член (member function) isbn()
.
item1.isbn() == item2.isbn()
Функция-член — это функция, определенная в составе класса. Функции-члены называют также методами (method) класса.
Вызов функции-члена обычно происходит от имени объекта класса. Например, первый, левый, операнд оператора равенства использует оператор точка (dot operator) ( оператор .
) для указания на то, что имеется в виду "член isbn()
объекта по имени item1
".
item1.isbn
Точечный оператор применим только к объектам типа класса. Левый операнд должен быть объектом типа класса, а правый операнд — именем члена этого класса. Результатом точечного оператора является член класса, заданный правым операндом.
Точечный оператор обычно используется для доступа к функциям-членам при их вызове. Для вызова функции используется оператор вызова (call operator) ( оператор ()
). Оператор обращения — это пара круглых скобок, заключающих список аргументов (argument), который может быть пуст. Функция- член isbn()
не получает аргументов.
item1.isbn()
Таким образом, это вызов функции isbn()
, являющейся членом объекта item1
класса Sales_item
. Эта функция возвращает ISBN, хранящийся в объекте item1
.
Правый операнд оператора равенства выполняется тем же способом: он возвращает ISBN, хранящийся в объекте item2
. Если ISBN совпадают, условие истинно, а в противном случае оно ложно.
Упражнение 1.23. Напишите программу, которая читает несколько транзакций и подсчитывает количество транзакций для каждого ISBN.
Упражнение 1.24. Проверьте предыдущую программу, введя несколько транзакций, представляющих несколько ISBN. Записи для каждого ISBN должны быть сгруппированы.
1.6. Программа для книжного магазина
Теперь все готово для решения проблемы книжного магазина: следует прочитать файл транзакций и создать отчет, где для каждой книги будет подсчитана общая выручка, средняя цена и количество проданных экземпляров. При этом подразумевается, что все транзакции для каждого ISBN вводятся группами.
Программа объединяет данные по каждому ISBN в переменной total
(всего). Каждая прочитанная транзакция будем сохранена во второй переменной, trans
. В противном случае значение объекта total
выводится на экран, а затем заменяется только что считанной транзакцией.
#include
#include "Sales_item.h"
int main() {
Sales_item total; // переменная для хранения данных следующей
// транзакции
// прочитать первую транзакцию и удостовериться в наличии данных
// для обработки
if (std::cin >> total) {
Sales_item trans; // переменная для хранения текущей транзакции
// читать и обработать остальные транзакции
while (std::cin >> trans) {
// если все еще обрабатывается та же книга
Интервал:
Закладка: