Стенли Липпман - Язык программирования C++. Пятое издание
- Название:Язык программирования C++. Пятое издание
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс
- Год:2014
- Город:Москва
- ISBN:978-5-8459-1839-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com
Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Псевдоним пространства имен (namespace alias) применяется в качестве короткого синонима имени пространства имен. Например, длинное имя пространства имен может иметь следующий вид:
namespace cplusplus_primer { /* ... */ };
Ему может быть назначен более короткий синоним следующим образом:
namespace primer = cplusplus_primer;
Объявление псевдонима пространства имен начинается с ключевого слова namespace
, за которым следует имя псевдонима пространства имен (короткое), сопровождаемое знаком =
, первоначальное имя пространства имен и точка с запятой. Если имя первоначального пространства имен еще не было определено как пространство имен, произойдет ошибка.
Псевдоним пространства имен может быть также применен к вложенному пространству имен:
namespace Qlib = cplusplus_primer::QueryLib;
Qlib::Query q;
Пространство имен может иметь множество синонимов или псевдонимов. Все псевдонимы и первоначальное имя пространства имен равнозначны в применении.
using
(напоминание)Имена, представленные в объявлении using
, подчиняются обычным правилам области видимости. Имя видимо от точки объявления using
и до конца области видимости, в которой оно объявлено. Сущности внутренней области видимости скрывают одноименные сущности внешней. Короткие имена могут использоваться только в той области видимости, в которой они объявлены, а также в областях видимости, вложенных в нее. По завершении области видимости следует использовать полные имена.
Объявление using
может присутствовать в глобальной и локальной области видимости, а также в области видимости пространства имен или класса. Объявление using
в области видимости класса ограничено именами, определенными в базовом классе определяемого класса (см. раздел 15.5).
using
Подобно объявлению using
, директива using
(using directive) позволяет использовать не квалифицированную форму имен. Однако, в отличие от объявления using
, здесь не сохраняется контроль над видимостью имен, поскольку все они видимы.
Директива using
начинается с ключевого слова using
, за которым следует ключевое слово namespace
, сопровождаемое именем пространства имен. Если имя пространства не было определено ранее, произойдет ошибка. Директива using
может присутствовать в глобальной, локальной области видимости или в пространстве имен. Она не может присутствовать в области видимости класса.
Предоставление директив
using
для таких пространств имен, как std
, которые приложение не контролирует, возвращает все проблемы конфликта имени, присущие использованию нескольких библиотек.
using
и область видимостиОбласть видимости имен, указанных директивой using
, гораздо сложнее, чем в случае объявления using
. Объявление using
помещает имя непосредственно в ту же область видимости, в которой находится само объявление using
. Объявление using
подобно локальному псевдониму для члена пространства имен.
Директива using
не объявляет локальные псевдонимы для имен членов пространства имен. Вместо этого она поднимает члены пространства имен в ближайшую область видимости, которая содержит и пространство имен, и саму директиву using
.
Различие в области видимости между объявлением using
и директивой using
проистекает непосредственно из принципа действия этих средств. В случае объявления using
само имя просто становится доступным в локальной области видимости. Директива using
, напротив, делает доступным все содержимое пространства имен. Вообще, пространство имен способно включать определения, которые не могут присутствовать в локальной области видимости. Как следствие, директива using
рассматривается как присутствующая в ближайшей области видимости окружающего пространства имен.
Рассмотрим самый простой случай. Предположим, что в глобальной области видимости определено пространство имен А
и функция f()
. Если функция f()
имеет директиву using
для пространства имен А
, функция f()
будет вести себя так, как будто имена пространства имен А
присутствовали в глобальной области видимости до определения функции f()
.
// пространство имен А и функция f() определены в глобальной области
// видимости
namespace А {
int i, j;
}
void f() {
using namespace A; // переводит имена из области видимости А в
// глобальную область видимости
cout << i * j << endl; // использует i и j из пространства имен A
// ...
}
using
Рассмотрим следующий пример:
namespace blip {
int i = 16, j = 15, k = 23; // другие объявления
}
int j = 0; // ok: j в пространстве имен blip скрыта
void manip() {
// директива using; имена пространства имен blip "добавляются" к
// глобальной области видимости
using namespace blip; // конфликт между ::j и blip::j
// обнаруживается только при использовании j
++i; // присваивает blip::i значение 17
++j; // ошибка неоднозначности: global j или blip::j?
++::j; // ok: присваивает глобальной j значение 1
++blip::j; // ok: присваивает blip::j значение 16
int k = 97; // локальная k скрывает blip::k
++k; // присваивает локальной k значение 98
}
Директива using
в функции manip()
делает все имена пространства имен blip
доступными непосредственно. То есть функция manip()
может обращаться к этим членам, используя краткую форму имен.
Члены пространства имен blip
выглядят так, как будто они были определены в одной области видимости. Если пространство имен blip
определено в глобальной области видимости, его члены будут выглядеть так, как будто они объявлены в глобальной области видимости.
Когда пространство имен вводится в окружающую область видимости, имена в пространстве имен вполне могут вступить в конфликт с другими именами, определенными (включенными) в той же области видимости. Например, в функции manip()
член j
пространства имен blip
вступает в конфликт с глобальным объектом j
. Такие конфликты разрешимы, но для использования имени следует явно указать, какая версия имеется в виду. Любое использование имени j
в пределах функции manip()
ведет к неоднозначности.
Интервал:
Закладка: