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

Интервал:

Закладка:

Сделать

Новичкам в объектно-ориентированном программировании зачастую трудней всего разобраться в проекте программы. Но как только проект станет абсолютно понятен, его реализация не вызывает проблем. Чтобы проще было понять суть проекта, все используемые в этом примере классы были обобщены в табл. 15.1.

Таблица 15.1. Обзор проекта программы

Классы и операторы интерфейса программы запросов
TextQuery Класс, который читает указанный файл и создает карту поиска. Этот класс предоставляет функцию поиска query(), которая получает строковый аргумент и возвращает объект класса QueryResult, представляющий строки, в которых присутствует ее аргумент (см. раздел 12.3.2)
QueryResult Класс, содержащий результаты вызова функции query()(см. раздел 12.3.2)
Query Класс интерфейса, указывающий на объект типа, производного от класса Query_base
Query q(s) Связывает объект qкласса Queryс новым объектом класса WordQuery, содержащим строку s
q1 & q2 Возвращает объект класса Query, связанный с новым объектом класса AndQuery, который содержит объекты q1и q2
q1 | q2 Возвращает объект класса Query, связанный с новым объектом класса OrQuery, содержащим объекты q1и q2
~q Возвращает объект класса Query, связанный с новым объектом класса NotQuery, содержащим объект q
Классы реализации программы запросов
Query_base Абстрактный класс, базовый для классов запроса
WordQuery Класс, производный от класса Query_base, который ищет указанное слово
NotQuery Класс, производный от класса Query_base, представляющий набор строк, в которых указанный операнд Queryотсутствует
BinaryQuery Абстрактный базовый класс, производный от класса Query_base, который представляет запросы с двумя операндами типа Query
OrQuery Класс, производный от класса BinaryQuery, который возвращает набор номеров строк, в которых присутствует хотя бы один из операндов
AndQuery Класс, производный от класса BinaryQuery, который возвращает набор номеров строк, в которых присутствуют оба операнда
Упражнения раздела 15.9.1

Упражнение 15.31. При условии, что s1, s2, s3и s4являются строками укажите, какие объекты создаются в следующих выражениях:

(a) Query(s1) | Query(s2) & ~ Query(s3);

(b) Query(s1) | (Query(s2) & ~ Query(s3));

(c) (Query(s1) & (Query(s2)) | (Query(s3) & Query(s4)));

15.9.2. Классы Query_baseи Query

Начнем реализацию с определения класса Query_base:

// абстрактный класс, являющийся базовым для конкретных типов запроса;

// все члены закрыты

class Query_base {

friend class Query;

protected:

using line_no = TextQuery::line_no; // используется в функциях eval()

virtual ~Query_base() = default;

private:

// eval() возвращает соответствующий запросу QueryResult

virtual QueryResult eval(const TextQuery&) const = 0;

// rep() строковое представление запроса

virtual std::string rep() const = 0;

};

Обе функции, eval()и rep(), являются чистыми виртуальными, что делает класс Query_baseабстрактным базовым (см. раздел 15.4). Поскольку класс Query_baseне предназначен для пользователей и непосредственного использования в производных классах, у него нет открытых членов. Класс Query_baseбудет использоваться только через объекты класса Query. Класс предоставляет дружественные отношения классу Query, поскольку его члены вызывают виртуальные функции класса Query_base.

Защищенный член line_noбудет использоваться в функциях eval(). Деструктор также будет защищен, поскольку он используется (неявно) деструкторами в производных классах.

Класс Query

Класс Queryпредоставляет интерфейс к иерархии наследования Query_baseи скрывает ее. Каждый объект класса Queryсодержит указатель shared_ptrна соответствующий объект класса Query_base. Поскольку класс Query— единственный интерфейс к классам иерархии Query_base, он должен определить собственные версии функций eval()и rep().

Конструктор Query(), получающий строку, создаст новый объект класса WordQueryи свяжет его указатель-член shared_ptrс этим недавно созданным объектом. Операторы &, |и ~создают объекты AndQuery, OrQueryи NotQueryсоответственно. Эти операторы возвращают объект класса Query, связанный с созданным им объектом. Для поддержки этих операторов класс Queryнуждается в конструкторе, получающем указатель shared_ptrна класс Query_baseи сохраняющем его. Сделаем этот конструктор закрытым, поскольку объекты класса Query_baseне предназначены для определения общим пользовательским кодом. Так как этот конструктор является закрытым, операторы следует сделать дружественными.

Исходя из приведенного выше проекта, сам класс Queryдовольно прост:

// класс интерфейса для взаимодействия с иерархией

// наследования Query_base

class Query {

// эти операторы должны обращаться к указателю shared_ptr

friend Query operator~(const Query &);

friend Query operator|(const Query&, const Query&);

friend Query operator&(const Query&, const Query&);

public:

Query(const std::string&); // создает новый WordQuery

// функции интерфейса: вызывают соответствующий оператор Query_base

QueryResult eval(const TextQuery &t) const

{ return q->eval(t); }

std::string rep() const { return q->rep(); }

private:

Query(std::shared_ptr query): q(query) { }

std::shared_ptr q;

};

Начнем с объявления дружественных операторов, создающих объекты класса Query. Эти операторы должны быть друзьями, чтобы использовать закрытый конструктор.

В открытом интерфейсе для класса Queryобъявляется, но еще не может быть определен получающий строку конструктор. Этот конструктор создает объект класса WordQuery, поэтому невозможно определить этот конструктор, пока не определен сам класс WordQuery.

Два других открытых члена представляют интерфейс для класса Query_base. В каждом случае оператор класса Queryиспользует свой указатель класса Query_baseдля вызова соответствующей (виртуальный) функции класса Query_base. Фактически вызываемая версия определяется во время выполнения и будет зависеть от типа объекта, на который указывает указатель q.

картинка 570Оператор вывода класса Query

Оператор вывода — хороший пример того, как работает вся система запросов:

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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