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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

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

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

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. Как и у других шаблонов, этот тип определяют в угловых скобках:

function

Здесь был объявлен тип function, способный представлять вызываемые объекты, возвращающие целочисленный результат и имеющие два параметра типа int. Этот тип можно использовать для представления любого из типов приложения калькулятора:

function f1 = add; // указатель на функцию

function f2 = div(); // объект класса объекта функции

function f3 = [](int i, int j) // лямбда-выражение

{ return i * j; };

cout << f1(4,2) << endl; // выводит 6

cout << f2(4,2) << endl; // выводит 2

cout << f3(4,2) << endl; // выводит 8

Теперь карту можно переопределить, используя тип function:

// таблица вызываемых объектов,

// соответствующих всем бинарным операторам

// все вызываемые объекты должны получать по два int и возвращать int

// элемент может быть указателем на функцию, объектом функции или

// лямбда-выражением

map> binops;

В эту карту можно добавить каждый из вызываемых объектов приложения, будь то указатель на функцию, лямбда-выражение или объект функции:

map> binops = {

{"+", add}, // указатель на функцию

{"-", std::minus()}, // объект библиотечной функции

{"/", div()}, // пользовательский объект функции

{"*", [](int i, int j) { return i * j; }}, // безымянное

// лямбда-выражение

{"%", mod} }; // именованный объект лямбда-выражения

В карте пять элементов. Хотя все лежащие в основе вызываемые объекты имеют различные типы, каждый из них можно хранить в общем типе function.

Как обычно, при индексировании карты возвращается ссылка на ассоциированное значение. При индексировании карты binopsвозвращается ссылка на объект типа function. Тип function перегружает оператор вызова. Этот оператор вызова получает собственные аргументы и передает их хранимому вызываемому объекту:

binops["+"](10, 5); // вызов add(10, 5)

binops["-"](10, 5); // использует оператор; вызов объекта minus

binops["/"](10, 5); // использует оператор; вызов объекта div

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

Интервал:

Закладка:

Сделать

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

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


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

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

x