Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Объект имеет смысл определять поближе к месту его первого использования. Это улучшает удобочитаемость и облегчает поиск определения переменной. Однако важней всего то, что когда переменная определяется ближе к месту ее первого использования, зачастую проще присвоить ей подходящее исходное значение.
Области видимости могут содержать другие области видимости. Содержащаяся (или вложенная) область видимости называется внутренней областью видимости (inner scope), а содержащая ее области видимости — внешней областью видимости (outer scope).
Как только имя объявлено в области видимости, оно становится доступно во вложенных в нее областях видимости. Имена, объявленные во внешней области видимости, могут быть также переопределены во внутренней области видимости:
#include
// Программа предназначена исключительно для демонстрации.
// Использование в функции глобальной переменной, а также определение
// одноименной локальной переменной - это очень плохой стиль
// программирования
int reused = 42; // reused имеет глобальную область видимости
int main()
{
int unique = 0; // unique имеет область видимости блока
// вывод #1; используется глобальная reused; выводит 42 0
std::cout << reused << " " << unique << std::endl;
int reused = 0; // новый локальный объект по имени reused скрывает
// глобальный reused
// вывод #2: используется локальная reused; выводит 0 0
std::cout << reused << " " << unique << std::endl;
// вывод #3: явное обращение к глобальной reused; выводит 42 0
std::cout << ::reused << " " << unique << std::endl;
return 0;
}
Вывод #1 осуществляется перед определением локальной переменной reused
. Поэтому данный оператор вывода использует имя reused
, определенное в глобальной области видимости. Этот оператор выводит 42 0
. Вывод #2 происходит после определения локальной переменной reused
. Теперь локальная переменная reused
находится в области видимости (in scope). Таким образом, второй оператор вывода использует локальный объект reused
, а не глобальный и выводит 0 0
. Вывод #3 использует оператор области видимости (см. раздел 1.2) для переопределения стандартных правил областей видимости. У глобальной области видимости нет имени. Следовательно, когда у оператора области видимости пусто слева, это обращение к указанному справа имени в глобальной области видимости. Таким образом, это выражение использует глобальный объект reused
и выводит 42 0.
Как правило, определение локальных переменных, имена которых совпадают с именами глобальных переменных, является крайне неудачным решением.
Упражнение 2.13. Каково значение переменной j
в следующей программе?
int i = 42;
int main() {
int i = 100;
int j = i;
}
Упражнение 2.14. Допустим ли следующий код? Если да, то какие значения он отобразит на экране?
int i = 100, sum = 0;
for (int i = 0; i != 10; ++i)
sum += i;
std::cout << i << " " << sum << std::endl;
2.3. Составные типы
Составной тип (compound type) — это тип, определенный в терминах другого типа. У языка С++ есть несколько составных типов, два из которых, ссылки и указатели, мы рассмотрим в этой главе.
У рассмотренных на настоящий момент объявлений не было ничего, кроме имен переменных. Такие переменные имели простейший, базовый тип объявления. Более сложные операторы объявления позволяют определять переменные с составными типами, которые состоят из объявлений базового типа.
2.3.1. Ссылки
Ссылка (reference) является альтернативным именем объекта. Ссылочный тип "ссылается на" другой тип. В определении ссылочного типа используется оператор объявления в форме &d
, где d
— объявляемое имя:
int ival = 1024;
int &refVal = ival; // refVal ссылается на другое имя, ival
int &refVal2; // ошибка: ссылку следует инициализировать
Обычно при инициализации переменной значение инициализатора копируется в создаваемый объект. При определении ссылки вместо копирования значения инициализатора происходит связывание (bind) ссылки с ее инициализатором. После инициализации ссылка остается связанной с исходным объектом. Нет никакого способа изменить привязку ссылки так, чтобы она ссылалась на другой объект, поэтому ссылки следует инициализировать.
Новый стандарт ввел новый вид ссылки — ссылка r-значения (r-value reference), которую мы рассмотрим в разделе 13.6.1. Эти ссылки предназначены прежде всего для использования в классах. С технической точки зрения, когда мы используем термин ссылка (reference), мы подразумеваем ссылку l-значения (l-value reference).

После того как ссылка определена, все операции с ней фактически осуществляются с объектом, с которым связана ссылка.
refVal = 2; // присваивает значение 2 объекту, на который ссылается
// ссылка refVal, т.е. ival
int ii = refVal; // то же, что и ii = ival
Ссылка — это не объект, а только другое имя уже существующего объекта .
При присвоении ссылки присваивается объект, с которым она связана. При доступе к значению ссылки фактически происходит обращение к значению объекта, с которым связана ссылка. Точно так же, когда ссылка используется как инициализатор, в действительности для этого используется объект, с которым связана ссылка.
// ok: ссылка refVal3 связывается с объектом, с которым связана
// ссылка refVal, т.е. с ival
int &refVal3 = refVal;
// инициализирует i значением объекта, с которым связана ссылка refVal
int i = refVal; // ok: инициализирует i значением ival
Поскольку ссылки не объекты, нельзя определить ссылку на ссылку.
В одном определении можно определить несколько ссылок. Каждому являющемуся ссылкой идентификатору должен предшествовать символ &
.
int i = 1024, i2 = 2048; // i и i2 — переменные типа int
Интервал:
Закладка: