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

Здесь есть возможность читать онлайн «Стенли Липпман - Язык программирования C++. Пятое издание» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2014, ISBN: 2014, Издательство: Издательский дом Вильямс, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

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

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Язык программирования C++. Пятое издание»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

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

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Язык программирования C++. Пятое издание», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Basket bsk;

bsk.add_item(make_shared("123", 45));

bsk.add_item(make_shared("345", 45, 3, .15));

На следующем этапе переопределим функцию add_item()так, чтобы она получала объект класса Quoteвместо указателя shared_ptr. Эта новая версия функции add_item()отработает резервирование памяти так, чтобы пользователи больше не должны были делать это сами. Определим две ее версии: одна будет копировать переданный ей объект, а другая перемещать его (см. раздел 13.6.3):

void add_item(const Quote& sale); // копирует переданный объект

void add_item(Quote&& sale); // перемещает переданный объект

Единственная проблема в том, что функция add_item()не знает, какой тип резервировать. При резервировании памяти функция add_item()скопирует (или переместит) свой параметр sale. Выражение newбудет выглядеть примерно так:

new Quote(sale)

К сожалению, это выражение будет неправильным: оператор newрезервирует объект запрошенного типа. Оно резервирует объект типа Quoteи копирует часть Quoteпараметра sale. Но если переданный параметру saleобъект будет иметь тип Bulk_quote, то он будет усечен.

картинка 567Имитация виртуального копирования

Эту проблему можно решить, снабдив класс Quoteвиртуальной функцией-членом, резервирующей его копию.

class Quote {

public:

// виртуальная функция, возвращающая динамически созданную копию

// эти члены используют квалификаторы ссылки; раздел 13.6.3

virtual Quote* clone() const & {return new Quote(*this);}

virtual Quote* clone() &&

{return new Quote(std::move(*this));}

// другие члены как прежде

};

class Bulk_quote : public Quote {

Bulk_quote* clone() const & {return new Bulk_quote(*this);}

Bulk_quote* clone() &&

{return new Bulk_quote(std::move(*this));}

// другие члены, как прежде

};

Поскольку функция add_item()имеет версии копирования и перемещения, были определены версии l- и r-значения функции clone()(см. раздел 13.6.3). Каждая функция clone()резервирует новый объект ее собственного типа. Функция-член константной ссылки на l-значение копирует себя во вновь зарезервированный объект; функция-член ссылки на r-значение перемещает свои данные.

Используя функцию clone(), довольно просто написать новые версии функции add_item():

class Basket {

public:

void add_item(const Quote& sale) // копирует переданный объект

{ items.insert(std::shared_ptr(sale.clone())); }

void add_item(Quote&& sale) // перемещает переданный объект

{ items.insert(

std::shared_ptr(std::move(sale).clone())); }

// другие члены, как прежде

};

Как и сама функция add_item(), функция clone()перегружается на основании того, вызвана ли она для l- или r-значения. Таким образом, первая версия функции add_item()вызывает константную версию l-значения функции clone(), а вторая версия вызывает версию ссылки на r-значение. Обратите внимание, что хотя в версии r-значения типом параметра saleявляется ссылка на r-значение, сам параметр sale(как и любая другая переменная) является l-значением (см. раздел 13.6.1). Поэтому для привязки ссылки на r-значение к параметру saleвызывается функция move().

Наша функция clone()является также виртуальной. Будет ли выполнена функция из класса Quoteили Bulk_quote, зависит (как обычно) от динамического типа параметра sale. Независимо от того, копируются или перемещаются данные, функция clone()возвращает указатель на вновь зарезервированный объект его собственного типа. С этим объектом связывается указатель shared_ptr, и вызывается функция insert()для добавления этого вновь зарезервированного объекта к items. Обратите внимание: так как указатель shared_ptrподдерживает преобразование производного класса в базовый (см. раздел 15.2.2), указатель shared_ptrможно привязать к Bulk_quote*.

Упражнения раздела 15.8.1

Упражнение 15.30. Напишите собственную версию класса Basketи используйте ее для вычисления цены за те же транзакции, что и в предыдущих упражнениях.

15.9. Возвращаясь к запросам текста

В качестве последнего примера наследования дополним приложение текстового запроса из раздела 12.3. Написанные в этом разделе классы позволят искать вхождения данного слова в файле. Дополним эту систему возможностью создавать более сложные запросы. В этих примерах запросы будут выполняться к тексту следующей истории:

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

Интервал:

Закладка:

Сделать

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

Представляем Вашему вниманию похожие книги на «Язык программирования C++. Пятое издание» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


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

Обсуждение, отзывы о книге «Язык программирования C++. Пятое издание» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x