Стенли Липпман - Язык программирования C++. Пятое издание

Тут можно читать онлайн Стенли Липпман - Язык программирования C++. Пятое издание - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Издательский дом Вильямс, год 2014. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Язык программирования C++. Пятое издание
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом Вильямс
  • Год:
    2014
  • Город:
    Москва
  • ISBN:
    978-5-8459-1839-0
  • Рейтинг:
    3/5. Голосов: 11
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

Стенли Липпман - Язык программирования C++. Пятое издание краткое содержание

Язык программирования C++. Пятое издание - описание и краткое содержание, автор Стенли Липпман, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
Лучшее руководство по программированию и справочник по языку, полностью пересмотренное и обновленное под стандарт С++11!
Вы держите в руках новое издание популярного и исчерпывающего бестселлера по языку программирования С++, которое было полностью пересмотрено и обновлено под
. Оно поможет вам быстро изучить язык и использовать его весьма эффективными и передовыми способами. В соответствии с самыми передовыми и современными методиками изложения материала авторы демонстрируют использование базового языка и его стандартной библиотеки для разработки эффективного, читабельного и мощного кода.
С самого начала этой книги читатель знакомится со стандартной библиотекой С++, ее самыми популярными функциями и средствами, что позволяет сразу же приступить к написанию полезных программ, еще не овладев всеми нюансами языка. Большинство примеров из книги было пересмотрено так, чтобы использовать новые средства языка и продемонстрировать их наилучшие способы применения. Эта книга — не только проверенное руководство для новичков в С++, она содержит также авторитетное обсуждение базовых концепций и методик языка С++ и является ценным ресурсом для опытных программистов, особенно желающих побыстрей узнать об усовершенствованиях С++11.
Стенли Б. Липпман Жози Лажойе Барбара Э. Му • Узнайте, как использовать новые средства языка С++11 и стандартной библиотеки для быстрого создания надежных программ, а также ознакомьтесь с высокоуровневым программированием
• Учитесь на примерах, в которых показаны передовые стили программирования и методики проектирования
• Изучите принципы и узнайте почему язык С++11 работает именно так
• Воспользуйтесь множеством перекрестных ссылок, способных помочь вам объединить взаимосвязанные концепции и проникнуть в суть
• Ознакомьтесь с современными методиками обучения и извлеките пользу из упражнений, в которых подчеркиваются ключевые моменты, позволяющие избежать проблем
• Освойте лучшие методики программирования и закрепите на практике изученный материал
Исходный код примеров можно загрузить с веб-страницы книги на сайте издательства по адресу: http://www.williamspublishing.com

Язык программирования C++. Пятое издание - читать онлайн бесплатно полную версию (весь текст целиком)

Язык программирования C++. Пятое издание - читать книгу онлайн бесплатно, автор Стенли Липпман
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Кроме классов животных, здесь можно определить дополнительные классы, которые инкапсулируют различные абстракции, например, животных, подвергающихся опасности. В данной реализации класс Panda(Панда) будет получен в результате множественного наследования от классов Bearи Endangered(Подвергающийся опасности).

18.3.1. Множественное наследование

Список наследования производного класса может содержать несколько базовых классов:

class Bear : public ZooAnimal { /* ... */ };

class Panda : public Bear, public Endangered { /* ... */ };

У каждого базового класса есть необязательный спецификатор доступа (см. раздел 15.5). Как обычно, если спецификатор доступа отсутствует, по умолчанию подразумевается спецификатор private(закрытый), если используется ключевое слово class, и public(открытый), если используется ключевое слово struct(см. раздел 15.5).

Как и при одиночным наследовании, список наследования может включить только те классы, которые были определены и не были определены как final(см. раздел 15.2.2). Язык С++ не налагает никаких ограничений на количество базовых классов, из которых может быть получен производный класс. Однако базовый класс может присутствовать в списке наследования только один раз.

При множественном наследовании классы наследуют состояние каждого из базовых классов

При множественном наследовании объект производного класса внутренне содержит объекты каждого из своих базовых классов (см. раздел 15.2.2). Например, на рис. 18.2 у объекта Pandaесть часть класса Bear(которая сама содержит часть ZooAnimal), часть класса Endangeredи нестатические переменные-члены, если таковые имеются, объявленные в пределах класса Panda.

Рис 182 Концептуальная структура объекта класса Panda Конструкторы - фото 688

Рис. 18.2. Концептуальная структура объекта класса Panda

Конструкторы производного класса инициализируют все объекты базовых классов

Создание объекта производного класса подразумевает создание и инициализацию внутренних объектов всех его базовых классов. В случае одиночного наследования из (единого) базового класса (см. раздел 15.2.2) в списке инициализации конструктора производного класса можно передать значения только для прямых базовых классов:

// явная инициализация объектов обоих базовых классов

Panda::Panda(std::string name, bool onExhibit)

: Bear(name, onExhibit, "Panda"),

Endangered(Endangered::critical) { }

// неявное применение стандартного конструктора класса Bear для

// инициализации его внутреннего объекта

Panda::Panda()

: Endangered(Endangered::critical) { }

Список инициализации конструктора позволяет передать аргументы каждому из прямых базовых классов, однако порядок выполнения конструкторов (constructor order) зависит от порядка их расположения в списке наследования класса. Порядок их расположения в списке инициализации конструктора не имеет значения. Объект класса Pandaинициализируется следующим образом.

• Внутренний объект класса ZooAnimal, самого первого базового класса иерархии класса Panda, непосредственного базового для класса Bearсоздается первым.

• Внутренний объект класса Bear, первого непосредственного базового класса для класса Panda, инициализируется следующим.

• Внутренний объект класса Endangered, второго непосредственного базового класса для класса Panda, инициализируется следующим.

• Последней инициализируется наиболее производная часть класса Panda.

Унаследованные конструкторы и множественное наследование

картинка 689По новому стандарту производный класс может наследовать свои конструкторы от одного или нескольких своих базовых классов (см. раздел 15.7.4). Нельзя наследовать тот же конструктор (т.е. конструктор с тем же списком параметров) от более чем одного базового класса:

struct Base1 {

Base1() = default;

Base1(const std::string&);

Base1(std::shared_ptr);

};

struct Base2 {

Base2() = default;

Base2(const std::string&);

Base2(int);

};

// ошибка: D1 пытается унаследовать D1::D1(const string&) от обоих

// базовых классов

struct D1: public Base1, public Base2 {

using Base1::Base1; // наследует конструкторы от Base1

using Base2::Base2; // наследует конструкторы от Base2

};

Класс, унаследовавший тот же конструктор от нескольких базовых классов, должен определить собственную версию этого конструктора:

struct D2: public Base1, public Base2 {

using Base1::Base1; // наследует конструкторы от Base1

using Base2::Base2; // наследует конструкторы от Base2

// D2 должен определить собственный конструктор, получающий string

D2(const string &s) : Base1(s), Base2(s) { }

D2() = default; // необходимо, поскольку D2 определяет собственный

// конструктор

};

Деструкторы и множественное наследование

Как обычно, деструктор в производном классе отвечает за освобождение ресурсов, зарезервированных этим классом. Автоматически освобождаются члены только производного класса и всех базовых классов. Тело синтезируемого деструктора пусто.

Деструкторы всегда выполняются в порядке, обратном вызову конструкторов. В данном примере порядок вызова деструкторов будет следующим: ~Panda(), ~Endangered(), ~Bear(), ~ZooAnimal().

Функции копирования и перемещения при множественном наследовании

Как и в случае одиночного наследования, классы с несколькими базовыми классами, определяющими собственные конструкторы копирования, перемещения и операторы присвоения, должны копировать, перемещать и присваивать весь объект (см. раздел 15.7.2). Базовые части класса, производного от нескольких базовых, автоматически копируются, перемещаются и присваиваются, только если производный класс использует синтезируемые версии этих функций-членов. В синтезируемых функциях-членах управления копированием каждый базовый класс неявно создается, присваивается или удаляется с использованием соответствующего члена базового класса.

Например, если класс Pandaиспользует синтезируемые функции-члены, то инициализация объекта ling_lingвызовет конструктор копий класса Bear, который в свою очередь вызовет конструктор копий класса ZooAnimalпрежде, чем выполнить конструктор копий класса Bear:

Panda ying_yang("ying_yang");

Panda ling_ling = ying_yang; // использует конструктор копий

Как только часть Bearобъекта ling_lingсоздана, выполняется конструктор копий класса Endangered, создающий соответствующую часть объекта. И наконец, выполняется конструктор копий класса Panda. Аналогично для синтезируемого конструктора перемещения.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стенли Липпман читать все книги автора по порядку

Стенли Липпман - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Язык программирования C++. Пятое издание отзывы


Отзывы читателей о книге Язык программирования C++. Пятое издание, автор: Стенли Липпман. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x