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

Интервал:

Закладка:

Сделать

Blob::Blob(int*, int*);

Определение а2использует уже готовый экземпляр класса Blobи создает экземпляр конструктора с параметром типа It, замененным на vector::iterator. Определение a3(явно) создает экземпляр шаблона Blobс собственным параметром шаблона типа stringи (неявно) экземпляр конструктора шаблона-члена этого класса с собственным параметром типа list.

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

Упражнение 16.21. Напишите собственную версию типа DebugDelete.

Упражнение 16.22. Пересмотрите программы TextQueryиз раздела 12.3 так, чтобы указатель-член shared_ptrиспользовал тип DebugDeleteкак свою функцию удаления (см. раздел 12.1.4).

Упражнение 16.23. Предскажите, когда будет выполняться оператор вызова в вашей основной программе запроса. Если предсказание неправильно, убедитесь, что понимаете почему.

Упражнение 16.24. Добавьте в свой шаблон Blobконструктор, получающий два итератора.

картинка 59216.1.5. Контроль создания экземпляра

Тот факт, что экземпляр шаблона создается только при его использовании (см. раздел 16.1.1), означает, что создание того же экземпляра может происходить в нескольких объектных файлах. Когда два или более отдельно откомпилированных файла исходного кода используют тот же шаблон с теми же аргументами шаблона, создание экземпляра этого шаблона осуществляется в каждом из этих файлов.

картинка 593В больших системах дополнительные затраты на создание экземпляра того же шаблона в нескольких файлах могут оказаться существенными. По новому стандарту можно избежать этих дополнительных затрат за счет явного создания экземпляра (explicit instantiation). Его форма такова:

extern template объявление; // объявление создания экземпляра

template объявление; // определение создания экземпляра

где объявление — это объявление класса или функции, в котором все параметры шаблона заменены аргументами шаблона. Например:

// объявление и определение создания экземпляра

extern template class Blob; // объявление

template int compare(const int&, const int&); // определение

Когда компилятор встретит внешнее ( extern) объявление шаблона, он не будет создавать код его экземпляра в этом файле. Объявление экземпляра как externявляется обещанием того, что будет и не внешнее создание экземпляра в другом месте программы. Вполне может быть несколько внешних объявлений для каждого экземпляра, однако по крайней мере одно определение экземпляра должно быть.

Поскольку компилятор автоматически создает экземпляр шаблона при его использовании, объявление externдолжно располагаться перед любым кодом, который использует этот экземпляр:

// Application.cc

// экземпляры этих шаблонов должны быть созданы

// в другом месте программы

extern template class Blob;

extern template int compare(const int&, const int&);

Blob sa1, sa2; // экземпляр создается в другом месте

// экземпляры Blob и его конструктор initializer_list создаются

// в этом файле

Blob a1 = {0,1,2,3,4,5,6,7,8,9};

Blob a2(a1); // экземпляр конструктора копий

// создается в этом файле

int i = compare(a1[0], а2[0]); // экземпляр создается в другом месте

Файл Application.oбудет создавать экземпляр класса Blobнаряду с его конструктором initializer_listи конструктором копий. Экземпляры функции compareи класса Blobне будут созданы в этом файле. Определения этих шаблонов должны быть в каком-то другом файле программы:

// templateBuild.cc

// файл создания экземпляра должен предоставить обычное определение для

// каждого типа и функции, которые другие файлы объявляют внешними

template int compare(const int&, const int&);

template class Blob; // создает экземпляры всех членов

// шаблона класса

В отличие от объявления, когда компилятор видит определение экземпляра, он создает код. Таким образом, файл templateBuild.oбудет содержать определения функции compare()для экземпляра типа intи класса Blob. При построении приложения следует скомпоновать файл templateBuild.oс файлом Application.o.

Язык программирования C Пятое издание - изображение 594Для каждого объявления экземпляра где-нибудь в программе должно быть определение явного создания экземпляра.

Определения экземпляров создают экземпляры всех членов

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

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

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

Упражнение 16.25. Объясните значение этих объявлений:

extern template class vector;

template class vector;

Упражнение 16.26. Предположим, что класс NoDefaultне имеет стандартного конструктора. Можно ли явно создать экземпляр vector? Если нет, то почему?

Упражнение 16.27. Объясните по каждому помеченному оператору, происходит ли создание экземпляра. Если создается экземпляр шаблона, объясните, почему; если нет, то тоже почему.

template class Stack { };

void f1(Stack); // (a)

class Exercise {

Stack &rsd; // (b)

Stack si; // (c)

};

int main() {

Stack *sc; // (d)

f1(*sc); // (e)

int iObj = sizeof(Stack); // (f)

}

картинка 59616.1.6. Эффективность и гибкость

Библиотечные типы интеллектуальных указателей (см. раздел 12.1) являются хорошим примером грамотно спроектированных шаблонов.

Очевидное различие между указателями shared_ptrи unique_ptrв стратегии, которую они используют для управления содержащимися в них указателями: один класс предоставляет совместную собственность; а другой — единоличною собственность на хранимый указатель. Это различие и является основанием для создания данных классов.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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