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

Интервал:

Закладка:

Сделать

// оператор > к двум строкам

sort(svec.begin(), svec.end(), greater());

Это сортирует вектор в порядке убывания. Третий аргумент — безымянный объект типа greater. Когда функция sort()сравнит элементы, вместо оператора <типа элемента она применит переданный объект функции greater. Этот объект применит оператор >к элементам типа string.

Одним из важнейших аспектов этих библиотечных объектов функций является то, что библиотека гарантирует их работоспособность с указателями. Помните, что результат сравнения двух несвязанных указателей непредсказуем (см. раздел 3.5.3). Но может понадобиться сортировать вектор указателей на основании их адреса в памяти. Хотя сделать это самостоятельно непросто, вполне можно применить один из библиотечных объектов функции:

vector nameTable; // вектор указателей

// ошибка: указатели в nameTable не связаны, результат < непредсказуем

sort(nameTable.begin(), nameTable.end(),

[](string *a, string *b) { return a < b; });

// ok: библиотека гарантирует, что less для типов указателя определен

sort(nameTable.begin(), nameTable.end(), less());

Стоит также обратить внимание на то, что ассоциативные контейнеры используют для упорядочивания своих элементов объект типа less. В результате можно определить набор ( set) указателей или использовать указатель как ключ в карте ( map) без необходимости определять тип lessсамостоятельно.

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

Упражнение 14.42. Используя библиотечные объекты и адаптеры функций, определите объекты для:

(a) Подсчета количеств значений больше 1024

(b) Поиска первой строки, не равной pooh

(c) Умножения всех значений на 2

Упражнение 14.43. Используя библиотечные объекты функций, определите, делимо ли переданное значение типа intна некий элемент в контейнере целых чисел.

14.8.3. Вызываемые объекты и тип function

В языке С++ есть несколько видов вызываемых объектов: функции и указатели на функции, лямбда-выражения (см. раздел 10.3.2), объекты, созданные функцией bind()(см. раздел 10.3.4), и классы с перегруженным оператором вызова функции.

Подобно любому другому объекту, у вызываемого объекта есть тип. Например, у каждого лямбда-выражения есть собственный уникальный (безымянный) тип класса. Типы функций и указателей на функции зависят от типа возвращаемого значения, типа аргумента и т.д.

Однако два вызываемых объекта с разными типами могут иметь ту же сигнатуру вызова (call signature). Сигнатура вызова определяет тип возвращаемого значения вызываемого объекта и тип (типы) аргумента, которые следует передать при вызове. Сигнатура вызова соответствует типу функции. Например:

int(int, int)

Функция этого типа получает два числа типа intи возвращает значение типа int.

Разные типы могут иметь одинаковую сигнатуру вызова

Иногда необходимо использовать несколько вызываемых объектов с одинаковой сигнатурой вызова, как будто это тот же тип. Рассмотрим, например, следующие разные типы вызываемых объектов:

// обычная функция

int add(int i, int j) { return i + j; }

// лямбда-выражение, создающее безымянный класс объекта функции

auto mod = [](int i, int j) { return i % j; };

// класс объекта функции

struct div {

int operator()(int denominator, int divisor) {

return denominator / divisor;

}

};

Каждый из этих вызываемых объектов применяет арифметическую операцию к своим параметрам. Даже при том, что у каждого из них разный тип, сигнатура вызова у них одинакова:

int(int, int)

Эти вызываемые объекты можно использовать для написания простого калькулятора. Для этого следует определить таблицу функций (function table), хранящую "указатели" на вызываемые объекты. Когда программе понадобится выполнить некую операцию, она просмотрит таблицу и найдет соответствующую функцию.

В языке С++ таблицы функций довольно просто реализовать при помощи карт ( map). В данном случае как ключ используем строку, соответствующую символу оператора; значение будет функцией, реализующей этот оператор. При необходимости выполнить заданный оператор индексируется карта и осуществляется вызов возвращенного элемента. Если бы все эти функции были автономными и необходимо было использовать только парные операторы для типа int, то карту можно было бы определить так:

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

// числа и возвращающую целое число

map binops;

Указатель addможно поместить в карту binopsследующим образом:

// ok: add - указатель на функцию соответствующего типа

binops.insert({"+", add}); // {"+", add} - пара раздел 11.2.3

Но сохранить в карте binopsобъекты modили divне получится:

binops.insert({"%", mod}); // ошибка: mod - не указатель на функцию

Проблема в том, что mod— это лямбда-выражение, и у каждого лямбда-выражения есть собственный тип класса. Этот тип не соответствует типу значений, хранимых в карте binops.

Библиотечный тип function

картинка 503Эту проблему можно решить при помощи нового библиотечного типа function, определенного в заголовке functional; возможные операции с типом functionприведены в табл. 14.3.

Таблица 14.3. Операции с типом function

function f; f— пустой объект класса function, способный хранить вызываемые объекты с сигнатурой вызова, эквивалентной типу функции T(т.е. Т— это retType(args))
function f(nullptr); Явное создание пустого объекта класса function
function f(obj); Сохранение копии вызываемого объекта objв объекте f
f Когда fиспользуется как условие; оно истинно, если содержит вызываемый объект, и ложно в противном случае
f( args ) Вызывает объект fс передачей аргументов args
Типы, определенные как члены шаблона function
result_type Тип возвращаемого значения объекта функции этого типа
argument_type first_argument_type second_argument_type Типы, определяемые, когда у типа Tесть один или два аргумента. Если у типа Tесть один аргумент, то argument_type— синоним его типа. Если у типа Tдва аргумента, то first_argument_typeи second_argument_type— синонимы их типов

Тип function— это шаблон. Подобно другим шаблонам, при создании его экземпляра следует указать дополнительную информацию. В данном случае этой информацией является сигнатура вызова объекта, который сможет представлять данный конкретный тип function. Как и у других шаблонов, этот тип определяют в угловых скобках:

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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