Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
do {
// ...
mumble(fоо) ;
} while (int foo = get_foo()); // ошибка: объявление в условии do
Если определить переменные в условии, то любое их использование произойдет прежде определения!
Упражнение 5.18. Объясните каждый из следующих циклов. Исправьте все обнаруженные ошибки.
(a) do
int v1, v2;
cout << "Please enter two numbers to sum:";
if (cin >> v1 >> v2)
cout << "Sum is: " << v1 + v2 << endl;
while (cin);
(b) do {
// ...
} while (int ival = get_response());
(c) do {
int ival = get_response();
} while (ival);
Упражнение 5.19. Напишите программу, использующую цикл do while
для циклического запроса у пользователя двух строк и указания, которая из них меньше другой.
5.5. Операторы перехода
Операторы перехода прерывают поток выполнения. Язык С++ предоставляет четыре оператора перехода: break
, continue
и goto
, рассматриваемые в этой главе, и оператор return
, который будет описан в разделе 6.3.
5.5.1. Оператор break
Оператор break
завершает ближайший окружающий оператор while
, do while
, for
или switch
. Выполнение возобновляется с оператора, следующего непосредственно за завершаемым оператором.
Оператор break
может располагаться только в цикле или операторе switch
(включая операторы или блоки, вложенные в эти циклы). Оператор break
воздействует лишь на ближайший окружающий цикл или оператор switch
.
string buf;
while (cin >> buf && !buf.empty()) {
switch(buf[0]) {
case '-':
// продолжать до первого пробела
for (auto it = buf.begin() + 1; it != buf.end(); ++it) {
if (*it == ' ')
break; // #1, выйти из цикла for
// ...
}
// break #1 передает управление сюда
// дальнейшая обработка случая '-'
break; // #2, выйти из оператора switch
case '+':
// ...
} // конец оператора switch
// break #2 передает управление сюда
} // конец оператора while
Оператор break
с меткой #1
завершает цикл for
в разделе case
для случая дефиса. Он не завершает внешний оператор switch
и даже не завершает обработку текущего случая. Выполнение продолжается с первого оператора после цикла for
, который мог бы содержать дополнительный код обработки случая дефиса или оператор break
, который завершает данный раздел.
Оператор break
с меткой #2
завершает оператор switch
, но не внешний цикл while
. Выполнение кода после оператора break
продолжает условие цикла while
.
Упражнение 5.20. Напишите программу, которая читает последовательность строк со стандартного устройства ввода до тех пор, пока не встретится повторяющееся слово или пока ввод слов не будет закончен. Для чтения текста по одному слову используйте цикл while
. Для выхода из цикла при встрече двух совпадающих слов подряд используйте оператор break
. Выведите повторяющееся слово, если оно есть, а в противном случае отобразите сообщение, свидетельствующее о том, что повторяющихся слов нет.
5.5.2. Оператор continue
Оператор continue
прерывает текущую итерацию ближайшего цикла и немедленно начинает следующую. Оператор continue может присутствовать только в циклах for
, while
или do while
, включая операторы или блоки, вложенные в такие циклы. Подобно оператору break
, оператор continue
во вложенном цикле воздействует только на ближайший окружающий цикл. Однако, в отличие от оператора break
, оператор continue
может присутствовать в операторе switch
, только если он встроен в итерационный оператор.
Оператор continue
прерывает только текущую итерацию; выполнение остается в цикле. В случае цикла while
или do while
выполнение продолжается с оценки условия. В традиционном цикле for
выполнение продолжается в выражении заголовка. В серийном операторе for
выполнение продолжается с инициализации управляющей переменной следующим элементом последовательности.
Следующий цикл читает со стандартного устройства ввода по одному слову за раз. Обработаны будут только те слова, которые начинаются с символа подчеркивания. Для любого другого значения текущая итерация заканчивается.
string buf;
while (cin >> buf && !buf.empty()) {
if (buf[0] != '_')
continue; // получить другой ввод
// все еще здесь? ввод начинается с '_', обработка buf...
}
Упражнение 5.21. Переделайте программу из упражнения раздела 5.5.1 так, чтобы она искала дубликаты только тех слов, которые начинаются с прописной буквы.
5.5.3. Оператор
goto
Оператор goto
обеспечивает безусловный переход к другому оператору в той же функции.
Не нужно использовать операторы
goto
. Они затрудняют и понимание, и изменение программ.
Оператор goto
имеет следующий синтаксис:
goto метка ;
Метка
(label) — это идентификатор, которым помечен оператор. Помеченный оператор (labeled statement) — это любой оператор, которому предшествует идентификатор, сопровождаемый двоеточием.
end: return; // помеченный оператор; может быть целью оператора goto
Метки независимы от имен, используемых для переменных и других идентификаторов. Следовательно, у метки может быть тот же идентификатор, что и у другой сущности в программе, не вступая в конфликт с другим одноименным идентификатором. Оператор goto
и помеченный оператор, на который он передает управление, должны находиться в той же функции.
Подобно оператору switch
, оператор goto
не может передать управление из точки, где инициализированная переменная вышла из области видимости, в точку, где эта переменная находится в области видимости.
// ...
goto end;
int ix = 10; // ошибка: goto обходит определение инициализированной
// переменной
end:
// ошибка: код здесь мог бы использовать ix,
// но goto обошел ее объявление
ix = 42;
Переход назад за уже выполненное определение вполне допустим. Переходя назад к точке перед определением переменная приведет к ее удалению и повторному созданию.
// переход назад через определение
Интервал:
Закладка: