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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

картинка 474Свойство l- или r-значения указателя thisзадают таким же образом, как и константность функции-члена (см. раздел 7.1.2): помещая квалификатор ссылки (reference qualifier) после списка параметров:

class Foo {

public:

Foo &operator=(const Foo&) & // возможно присвоение только

// изменяемым l-значениям

// другие члены класса Foo

};

Foo &Foo::operator=(const Foo &rhs) & {

// сделать все необходимое для присвоения rhs этому объекту

return *this;

}

Квалификаторы ссылки &или &&означают, что указатель thisможет указывать на r- или l-значение соответственно. Подобно спецификатору const, квалификатор ссылки может быть применен только к (нестатической) функции-члену и должен присутствовать как в объявлении, так и в определении функции.

Функцию, квалифицированную символом &,можно применить только к l-значению, а функцию, квалифицированную символом &&,—только к r-значению:

Foo &retFoo(); // возвращает ссылку;

// вызов retFoo() является l-значением

Foo retVal(); // возвращает значение; вызов retVal() - r-значение

Foo i, j; // i и j - это l-значения

i = j; // ok: i - это l-значение

retFoo() = j; // ok: retFoo() возвращает l-значение

retVal() = j; // ошибка: retVal() возвращает r-значение

i = retVal(); // ok: вполне можно передать r-значение как правый

// операнд присвоения

Функция может быть квалифицирована и ссылкой, и константой. В таких случаях квалификатор ссылки должен следовать за спецификатором const:

class Foo {

public:

Foo someMem() & const; // ошибка: первым должен быть

// спецификатор const

Foo anotherMem() const & // ok: спецификатор const расположен первым

};

Перегрузка и ссылочные функции

Подобно тому, как можно перегрузить функцию-член на основании константности параметра (см. раздел 7.3.2), ее можно перегрузить на основании квалификатора ссылки. Кроме того, функцию можно перегрузить на основании квалификатора ссылки и константности. В качестве примера придадим классу Fooчлен типа vectorи функцию sorted(), возвращающую копию объекта класса Foo, в котором сортируется вектор:

class Foo {

public:

Foo sorted() && // применимо к изменяемым r-значениям

Foo sorted() const & // применимо к любому объекту класса Foo

// другие члены класса Foo

private:

vector data;

};

// этот объект - r-значение, поэтому его можно сортировать на месте

Foo Foo::sorted() && {

sort(data.begin(), data.end());

return *this;

}

// этот объект либо константа, либо l-значение;

// так или иначе, его нельзя сортировать на месте

Foo Foo::sorted() const & {

Foo ret(*this); // создает копию

sort(ret.data.begin(), ret.data.end()); // сортирует копию

return ret; // возвращает копию

}

При выполнении функции sorted()для r-значения вполне безопасно сортировать вектор-член dataнепосредственно. Объект является r-значением, а это означает, что у него нет никаких других пользователей, поэтому данный объект можно изменить непосредственно. При выполнении функции sorted()для константного r- или l-значения изменить этот объект нельзя, поэтому перед сортировкой вектор-член dataнеобходимо скопировать.

Поиск перегруженной функции использует свойство l-значение/r-значение объекта, вызвавшего функцию sorted()для определения используемой версии:

retVal().sorted(); // retVal() - это r-value, вызов Foo::sorted() &&

retFoo().sorted(); // retFoo() - это l-value,

// вызов Foo::sorted() const &

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

class Foo {

public:

Foo sorted() &&

Foo sorted() const; // ошибка: должен быть квалификатор ссылки

// Comp - псевдоним для типа функции (см. p. 6.7)

// он применим для сравнения целочисленных значений

using Comp = bool(const int&, const int&);

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

Интервал:

Закладка:

Сделать

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

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


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

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

x