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

Интервал:

Закладка:

Сделать

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

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

В качестве примера определим оператор индексирования для класса StrVec(см. раздел 13.5):

class StrVec {

public:

std::string& operator[](std::size_t n)

{ return elements[n]; }

const std::string& operator[](std::size_t n) const

{ return elements[n]; }

// другие члены, как в разделе 13.5

private:

std::string *elements; // указатель на первый элемент массива

};

Эти операторы можно использовать таким же образом, как и индексирование вектора или массива. Поскольку оператор индексирования возвращает ссылку на элемент, если объект класса StrVecне константен, то этому элементу можно присвоить значение; если индексируется константный объект, присвоение невозможно:

// svec - объект класса StrVec

const StrVec cvec = svec; // копировать элементы из svec в cvec

// если у svec есть элементы, выполнить функцию empty() класса string

// для первого

if (svec.size() && svec[0].empty()) {

svec[0] = "zero"; // ok: индексирование возвращает ссылку на строку

cvec[0] = "Zip"; // ошибка: индексация cvec возвращает ссылку на

// константу

}

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

Упражнение 14.26. Определите операторы индексирования для классов StrVec, String, StrBlobи StrBlobPtr.

14.6. Операторы инкремента и декремента

Операторы инкремента ( ++) и декремента ( --) обычно реализуют для классов итераторов. Эти операторы позволяют перемещать итератор с элемента на элемент последовательности. Язык никак не требует, чтобы эти операторы были членами класса. Но поскольку они изменяют состояние объекта, с которым работают, лучше сделать их членами класса.

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

Язык программирования C Пятое издание - изображение 495Классы, определяющие операторы инкремента или декремента, должны определять как префиксные, так и постфиксные их версии. Обычно эти операторы определяют как функции-члены.

Определение префиксных версий операторов инкремента и декремента

Для иллюстрации операторов инкремента и декремента определим их для класса StrBlobPtr(см. раздел 12.1.6):

class StrBlobPtr {

public:

// инкремент и декремент

StrBlobPtr& operator++(); // префиксные операторы

StrBlobPtr& operator--();

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

};

Язык программирования C Пятое издание - изображение 496Чтобы соответствовать встроенным типам, префиксные операторы должны возвращать ссылку на объект после инкремента или декремента.

Операторы инкремента и декремента работают подобным образом — они вызывают функцию check()для проверки допустимости объекта класса StrBlobPtr. Если это так, то функция check()проверяет также допустимость данного индекса. Если функция check()не передает исключения, эти операторы возвращают ссылку на свой объект.

В случае инкремента функции check()передается текущее значение curr. Пока это значение меньше размера основного вектора, функция check()завершается нормально. Если значение currнаходится за концом вектора, функция check()передает исключение:

// префикс: возвращает ссылку на объект после инкремента

// или декремента

StrBlobPtr& StrBlobPtr::operator++() {

// если curr уже указывает после конца контейнера, инкремент

// невозможен

check(curr, "increment past end of StrBlobPtr");

++curr; // переместить текущую позицию вперед

return *this;

}

StrBlobPtr& StrBlobPtr::operator--() {

// если curr равен нулю, то декремент возвратит недопустимый индекс

--curr; // переместить текущую позицию назад

check(-1, "decrement past begin of StrBlobPtr");

return *this;

}

Оператор декремента уменьшает значение currпрежде, чем вызвать функцию check(). Таким образом, если значение curr(беззнаковое) уже является нулем, передаваемое функции check()значение будет наибольшим позитивным значением, представляющим недопустимый индекс (см. раздел 2.1.2).

Дифференциация префиксных и постфиксных операторов

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

Для решения этой проблемы постфиксные версии получают дополнительный (неиспользуемый) параметр типа int. При использовании постфиксного оператора компилятор присваивает этому параметру аргумент 0. Хотя постфиксная функция вполне может использовать этот дополнительный параметр, как правило, так не поступают. Этот параметр не нужен для работы, обычно выполняемой постфиксным оператором. Его основная задача заключается в том, чтобы отличить определение постфиксной версии функции от префиксной.

Теперь в класс CheckedPtrможно добавить постфиксные операторы:

class StrBlobPtr {

public:

// инкремент и декремент

StrBlobPtr operator++(int); // постфиксные операторы

StrBlobPtr operator--(int);

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

};

Язык программирования C Пятое издание - изображение 497Для совместимости со встроенными операторами постфиксные операторы должны возвращать прежнее значение (существовавшее до декремента или инкремента). Оно должно быть возвращено как значение, а не как ссылка.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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