Бьерн страуструп язык программирования с. Нужны хорошие пакетные менеджеры и системы сборки

Как было обещано в первом издании книги, запросы пользователей определили развитие С++. Его направлял опыт широкого круга пользователей, работающих в разных областях программирования. За шесть лет, отделяющих нас от первого издания описания С++, число пользователей возросло в сотни раз. За эти годы были усвоены многие уроки, были предложены и подтвердили практикой свое право на существование различные приемы программирования. О некоторых из них и пойдет речь ниже.

Сделанные за эти шесть лет расширения языка прежде всего были направлены на повышение выразительности С++ как языка абстракции данных и объектно-ориентированного программирования вообще и как средства для создания высококачественных библиотек с пользовательскими типами данных в

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

Эта книга является полным описанием языка С++. Главы с 1 по 10 представляют собой учебник, знакомящий с языком. В главах с 11 по 13 обсуждаются вопросы проектирования и развития программного обеспечения. Завершается книга справочным руководством по языку С++. Естественно, что все расширения языка и способы их использования, которые появились после выхода в свет первого издания, являются частью изложения. К ним относятся уточненные правила для разрешения перегрузки имени, средства управления памятью и средства контроля доступа, надежная по типам процедура связывания, статические и постоянные функции-члены, абстрактные классы, множественное наследование, шаблоны типов и обработка особых ситуаций.

С++ является языком программирования общего назначения. Естественная для него область применения - системное программирование, понимаемое в широком смысле этого слова. Кроме того, С++ успешно используется во многих областях приложения, далеко выходящих за указанные рамки. Реализации С++ теперь есть на всех машинах, начиная с самых скромных микрокомпьютеров - до самых больших супер-ЭВМ, и практически для всех операционных систем. Поэтому книга дает лишь описание собственно языка, не объясняя особенности конкретных реализаций, среды программирования или библиотек.

Читатель найдет в книге много примеров с классами, которые, несмотря на несомненную пользу, можно считать игрушечными. Такой стиль изложения позволяет лучше выделить основные понятия и полезные приемы, тогда как в настоящих, законченных программах они были бы скрыты массой деталей. Для большинства предложенных здесь классов, как то связанные списки, массивы, строки символов, матрицы, графические классы, ассоциативные массивы и т.д., - приводятся версии "со 100% гарантией" надежности и правильности, полученные на основе классов из самых разных коммерческих и некоммерческих программ. Многие из "промышленных" классов и библиотек получились как прямые или косвенные потомки игрушечных классов, приводимых здесь как примеры.

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

Сейчас проходит конференция CppCon 2017, и на их youtube-канале уже стали появляться видео оттуда. И я подумал, почему бы не попробовать сделать конспекты интересных лекций. Конечно, не очень уверен, надолго ли меня хватит, зависит от того насколько вам это понравится.


Это первое вступительное видео. Оно не такое интересное для меня, но пропустить тоже не мог, это же Страуструп. Далее, текст от его лица. Заголовки взяты из слайдов.



Disclaimer: весь дальнейший текст - достаточно краткий пересказ, являющийся результатом работы моего восприятия, и то, что я посчитал "водой" и проигнорировал, могло оказаться важным для вас. Иногда выступление было таким: "(важная мысль 1)(минута воды)(важная мысль 2)". Эти две мысли плавно перетекали друг в друга, а у меня получались довольно резкие скачки. Где можно сгладил, но посчитал нецелесообразным полностью причесывать текст, на это бы потребовалось много времени.

Вступление

Когда меня попросили выступить на открытии конференции, я задумался, о чем же я могу рассказать такого, что важно для вас, и чего вы не слышали миллион раз. И я решил рассказать про обучение языку C++.

Мы все учителя и мы все ученики

Зададимся вопросом кого мы учим, чему, зачем и как. Нужно делать это лучше. Я не критикую кого-то в частности, но чувствую, что мы должны делать это лучше. Не все из нас преподаватели, но тем не менее постоянно возникают случаи, когда мы занимаемся обучением. Например, рассказываем коллегам о последних фичах или даем советы. Общаемся на StackOverflow, Reddit, ведем блоги и т.д. Но нужно давать хорошие советы. Советы, которые двигают мир вперед.


Есть одна вещь, которая сильно беспокоит меня - зачастую у людей бывают очень странные представления о том, что собой представляет C++. Чуть позже я вернусь к этой проблеме.


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

Обучение программированию

Не нужно фокусироваться на языковых фичах. Например, вы встречали примеры в которых объясняется проблема приведения signed short к unsigned int [рассказывается о преподавании языка в общем, а не об особенностях C++ ]. Это неинтересно и можно увидеть в отладчике или прочитать в руководстве. Учите так, чтобы такая проблема не появлялась.


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


Одна из встечающихся проблем обучения C++ - то что язык изучается сам по себе, отдельно от библиотек. Вектор на 697 странице, sort через 100 страниц. Это учит, что stl скучная, сложная фигня. И в то же время: свой Linked List или Hash table это круто, круче чем stl.

Не будьте слишком умными


Люди которые хотят и требуют "самое последнее" часто не знают основ. Пересмотрите основы.


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


Фокусируйтесь на общих случаях. Будьте рациональными. Не говорите ученикам "Делай только так, это правильно, это закаляет характер. И можете получить пятерку, если ответите именно так". Нужно объяснить, почему нужно следовать правилам, дать ученикам хорошие идеалы, идеи, техники.


Конечно, обучая, очень заманчиво, стоять перед коллегами, группой людей и всем своим видом показывать: "Смотрите, эта сложная вещь, которую вы не поняли. Это означает, что я умный". Это не очень хорошее обучение.

Обучение программированию

Если изучать только сам язык, то попав в реальность можно просто "утонуть".
Используйте различные инструменты. Не только компилятор и учебник, но и IDE, отладчики, системы контроля версий, профилировщики, модульное тестирование, статические анализаторы, онлайн компиляторы. Инструменты должны быть современными (иногда получаю вопросы по Turbo C++ 4.0:()


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

Язык это не только синтаксис

Как мы часто учим? Объясняем язык плюс немного стандартную библиотеку. Без всякой графики, пользовательского интерфейса, веба, электронной почты, баз данных… И многие ученики считают, что C++ скучный бесполезный язык. Но это же не так, ведь такие вещи как браузеры, СУБД, САПР и прочие пишутся на C++. Перед началом лекции потратьте 5 минут о практическом применении.

Мы должны сделать лучше

Нам, сообществу C++, очень важно упростить начало работы, возможность пользоваться "прямо сейчас".

Как пользователи в различных отраслях разделяются на группы? Приведем пример с фотографией. Результат зависит от оборудования и от пользователя. Лично я новичок в фотографии. Большинство возможностей профессиональной фотокамеры будут для меня бесполезными. Она много весит, дорого стоит. Для нее существует множество аксессуаров в которых можно утонуть. Но с ее помощью можно делать превосходные фотографии, если потратить много времени на обучение. Аналогично существует много людей, которые не могут использовать разнообразные фичи языка и библиотеки.

Массовый рынок

С другой стороны, у нас есть устройства, которыми можно пользоваться сразу. Такое устройство дешевое, простое, "милое". Прощает ошибки, не требует много усилий для освоения. Является "вещью в себе". Мало расширений и дополнений, если таковые вообще есть. Отсутствуют взаимозаменяемые части.


Как-то во время преподавания мне было нужно, чтобы у студентов была установлена библиотека GUI. Оказалось, что установить одну и ту же библиотеку на студенческие Mac, Linux, Windows, весьма болезненно.

Языку нужна "система"

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


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

Какими должны быть основные дистрибутивы?

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

Модули помогут

import bundle.entry_level; //Для новичков import bundle.enthusiast_level; //Для продвинутых import bundle.professional_level; //Для профессионалов

Расширения (которые не входят в базу):


import grahics.2d; import grahics.3d; import professional.graphics.3d; import physlib.linear_algebra; import boost.XML; import 3rd_party.image_filtering;

Нужны хорошие пакетные менеджеры и системы сборки

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


> download gui_xyz > install gui_xyz

Или эквивалентным способом, например в IDE:


import gui_xyz; //в коде

Современный C++

Мое видение современного C++ (как обычно):

  • Статическая типобезопасность, хорошо определенные интерфейсы.
  • Безопасность ресурсов (конструкторы/деструкторы, RAII).
  • Абстракции без накладных расходов.
  • Инкапсуляция, инварианты.
  • Обобщенное программирование, шаблоны.
  • Простота для большинства разработчиков, сложность скрыта в библиотеках.

Меняться трудно

Современный C++ это не C, Java, C++98 и не тот язык, на которым вы программировали 10 лет назад. Инерция - враг хорошего кода. Преподаватели, оправдывая неиспользование современных стандартов, говорят, что "мы так не делаем", "это не вставить в мою учебную программу", "может быть через 5 лет". У студентов появляется большее доверие к интернету, чем к преподавателям. Некоторые считают, что они умнее преподавателей, и иногда они правы. У меня стабильно каждый год на курсе были студенты, абсолютно убежденные, что они умнее меня в программировании. В этих частных случаях, я обоснованно уверен, что оне не правы [смех в зале ].

Что такое современный С++?

  • Лучшие практики, использующие текущий стандарт ISO С++
  • Стремление к типо- и ресурснобезопасному коду

Для реализации этого 2 года назад был открыт проект C++ Core Guidelines . Он дает конкретные ответы на вопросы. У него много много участников, включая Microsoft и Red Hat.

Примеры кода

Не отделяйте примеры от объяснения. 5 страниц голой теории это лишняя трата. Давайте примеры и объяснения к ним. Без объяснения люди не обобщают. Они просто копипастят и сами изобретают трактовку, причем иногда очень странную.

Улучшение кода

Всегда объясняйте причины. Например:


//1 int max = v.size(); for(int i = 0; i < max; ++i) //2 for (auto x: v)

Почему 2 лучше чем 1? Пример 2 явно показывает намерение, v может быть изменен без переписывания цикла, и менее подвержен ошибкам. Следует заметить, что 1 предоставляет более гибкие возможности. Но ведь goto еще более универсален, и поэтому мы избегаем его.

  • I.4: Делайте интерфейсы точными и строготипизированными

[I.4 означает пункт из Core Guidelines ]


void blink_led1(int time_to_blink) //Плохо - неясный тип void blink_led2(milliseconds time_to_blink) //Хорошо void use() { blink_led2(1500); //Ошибка: какая единица измерения? blink_led2(1500ms); blink_led2(1500s); //Ошибка: неверная единица измерения }

[Здесь milliseconds какой-то простой тип не из библиотеки Chrono, поэтому последняя строчка приводит к ошибке. Ниже по тексту описано обобщение типа для единицы измерения, взятого из Chrono. Если интересно, можете почитать мое этой библиотеки ]


template void blink_led(duration time_to_blink) { auto ms_to_blink = duration_cast(time_to_blink); } void use() { blink_led(2s); blink_led(1500ms); }
  • ES.20: Всегда инициализируйте объект
  • F.21: Для возврата нескольких значений из функций предпочитайте использовать tuple, структуру (или structured binding).
Error_code err; //неинициализировано: потенциальная проблема //... Channel ch = Channel::open(s, &err); //out-параметр: потенциальная проблема if(err) { ... } Лучше: auto = Channel::open(s) //structured binding if(err) ...

А должен ли этот код использовать возврат двух параметров?

  • E.1: Прорабатывайте стратегию отлова ошибок в начале разработки
  • E.2: Бросайте исключение для уведомления того, что функция не может выполнить задачу
  • E.3: Используйте исключения только для уведомления об ошибках
auto ch = Channel::open(s);

Лучше? Да, если неуспешное открытие было предусмотрено в программе.

Улучшение кода: не будьте слишком умными

Слово "умный" в контексте использования C++ - ругательное. Найдите баг:


istream& init_io() { if(argc > 1) return *new istream { argv, "r" }; else return cin; }
  • P.8: Не допускайте утечки
  • R.11: Избегайте прямого вызова new и delete
  • R.4: Raw-ссылка (T&) должны быть невладеющей

Название : Язык программирования С++.

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


Перед вами - специальное издание самой читаемой и содержащей наиболее достоверные сведения книга по С++. Книга содержит полное описание языка С++, его стандартной библиотеки (STL) и ключевых методов разработки программ. Основанная на стандарте ANSI/ISO, книга является источником самого последнего и полного описания всех возможностей языка С++, включая компоненты стандартной библиотеки, в том числе:

  • абстрактные классы в качестве интерфейсов;
  • иерархию классов при объектно-ориентированном программировании;
  • шаблоны как основу безопасного относительно типов обобщенного программирования;
  • обработку исключений, возникающих в результате типичных ошибок;
  • использование пространств имен (namespaces) для достижения модульности больших проектов
  • определение типа на этапе исполнения (RTTI) для слабо связанных систем;
  • подмножество С языка С++ для совместимости с С и работы на системном уровне;
  • стандартные контейнеры и алгоритмы;
  • стандартные строки, потоки ввода/вывода и числовые данные;
  • совместимость с С, локализацию (интернационализацию) и безопасность при обработке исключений.
Краткое оглавление
Предисловие автора к третьему русскому изданию.25
От редакции русского издания.27
Предисловие.29
Предисловие ко второму изданию.31
Предисловие к первому изданию.33
ВВЕДЕНИЕ.35
1. Обращение к читателю.37
2. Обзор C++.57
3. Обзор стандартной библиотеки.81
Часть I. Основные средства. 105
4. Типы и объявления. 107
5. Указатели, массивы и структуры.127
6. Выражения и инструкции.147
7. Функции.185
8. Пространства имен и исключения.209
9. Исходные файлы и программы.241
Часть II. Механизмы абстракции. 267
10. Классы.269
11. Перегрузка операторов.309
12. Производные классы.349
13. Шаблоны.377
14. Обработка исключений.407
15. Иерархии классов.443
Часть III. Стандартная библиотека. 483
16. Организация библиотеки и контейнеры.485
17. Стандартные контейнеры.519
18. Алгоритмы и объекты-функции.569
19. Итераторы и распределители памяти.613
20. Строки.645
21. Потоки.671
22. Численные методы.725
Часть IV. Проектирование с использованием C++. 757
23. Разработка и проектирование.759
24. Проектирование и программирование.797
25. Роли классов.841
Приложения и предметный указатель.869
Приложение А. Грамматика.871
Приложение Б. Совместимость.891
Приложение В. Технические подробности.903
Приложение Г. Локализация.947
Приложение Д. Безопасность исключений
и стандартная библиотека.1017
Предметный указатель.1055

Бесплатно скачать электронную книгу в удобном формате, смотреть и читать:
Скачать книгу Язык программирования С++ - Бьерн Страуструп. - fileskachat.com, быстрое и бесплатное скачивание.

Скачать djvu
Ниже можно купить эту книгу по лучшей цене со скидкой с доставкой по всей России.



Книга написана Бьерном Страуструпом – автором языка программирования C++ – и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный объектно-ориентированный подход к созданию программных продуктов.
Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Применение языка C++ доставляет мне все большее удовольствие. За прошедшие годы средства поддержки проектирования и программирования на C++ кардинально улучшились, а также было предложено множество полезных и удобных методик их использования. Но речь идет не только об удовольствии. Практикующие программисты достигли значительного повышения производительности, уровня поддержки, гибкости и качества в проектах любого уровня сложности и масштаба. К настоящему времени C++ оправдал большую часть возлагавшихся на него надежд, а кроме того он преуспел в решении задач, о которых я даже и не мечтал.

Всего лишь треть информации из первого издания перекочевало во второе издание данной книги. Третье издание переработано еще более интенсивно. В ней есть кое-что, что будет полезно самым опытным программистам на C++. В то же время, она более доступна новичкам, чем предыдущие издания этой книги. Это стало возможным благодаря взрывному росту практического использования C++ и опыту, вытекающему из этой практики.

Стандартная библиотека позволяет по-новому представить основные концепции языка C++. Как и предыдущие издания, настоящая книга описывает язык C++ независимо от конкретных реализаций. Как и в предыдущих изданиях, все конструкции и концепции излагаются «снизу-вверх», так что к тому моменту, когда они начинают использоваться, они уже представлены и подробно описаны. Отметим, что начать использовать хорошо спроектированную библиотеку можно прежде, чем читатели смогут изучить ее внутреннее устройство. Кроме того, стандартная библиотека сама по себе является ценнейшим источником примеров
программирования и методов проектирования.

В Только отличное понимание идей, стоящих за средствами языка, ведет к настоящему мастерству. Дополненная деталями реализации информация из настоящей книги является достаточной для выполнения реальных проектов заметного масштаба.

Обзор языка C++

Что такое C++? - парадигмы программирования - процедурное программирование - модульность - раздельная компиляция - обработка исключений -
абстракция данных - типы, определяемые пользователем - конкретные типы - абстрактные типы - виртуальные функции - объектно-ориентированное
программирование - обобщенное программирование - контейнеры - алгоритмы - язык и программирование - советы.
В настоящей главе поясняется, что все это значит, но без ознакомления с мельчайшими деталями языковых определений. Дается общий обзор языка C++ и ключевых идей его применения, не отягощенных подробными сведениями, необходимыми для начала реального практического программирования на C++.

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

Парадигмы программирования

Объектно-ориентированное программирование есть техника программирования, можно сказать, парадигма, для написания «хороших» программ для некоторого класса задач. Термин же «объектно-ориентированный язык программирования» должен в первую очередь означать такой язык, который хорошо поддерживает объектно-ориентированный стиль программирования.

Здесь следует четко различать две ситуации. Мы говорим, что язык поддерживает некоторый стиль программирования, если он предоставляет специальные
средства, позволяющие этот стиль легко (удобно, надежно, эффективно) реализовывать на практике. Если же язык требует исключительных усилий и огромного опыта для реализации некоторой техники программирования, то мы говорим, что он лишь допускает возможность ее применения. Например, на языке Fortran 77 можно писать структурные программы, а на языке С можно писать программы в объектно-ориентированном стиле, но все это требует неадекватно больших усилий, так как эти языки напрямую не поддерживают указанные стили программирования.

Объектно-ориентированное программирование

Абстракция данных чрезвычайно важна для выполнения качественного проектирования и она будет в центре нашего внимания на протяжении всей книги.
Однако типы, определяемые пользователем, сами по себе не настолько гибкие, чтобы удовлетворить все наши потребности. В настоящем разделе сначала
демонстрируется проблема, связанная с простым пользовательским типом, а затем показывается, как ее преодолеть с помощью классовых иерархий.

Обзор стандартной библиотеки

Ни одна значительная программа не написана исключительно лишь на «голых» конструкциях языка программирования. Сначала разрабатываются библиотеки поддержки. Затем они становятся основой для дальнейшей работы.

В продолжении главы 2 здесь дается краткий обзор основных библиотечных средств, дающий представление о том, что в итоге может быть создано с помощью
языка C++ и его стандартной библиотеки. Рассматриваются такие полезные типы стандартной библиотеки, как string, vector, list и тар, а также наиболее
употребительные варианты их использования. Это позволяет мне приводить более осмысленные примеры и давать более интересные упражнения в последующих главах книги. Как и в главе 2, здесь также настоятельно рекомендуется не отвлекаться и не огорчаться из-за неполного понимания деталей излагаемого материала. Цель настоящей главы состоит в том, чтобы дать вам почувствовать, с чем придется столкнуться при дальнейшем обучении, а также помочь овладеть простейшими способами использования наиболее полезных средств библиотеки. Подробное введение в стандартную библиотеку дано в…

Переключить меню

Бьерн Страуструп "Язык программирования С++"

Сейчас давайте рассмотрим книгу по языку программирования С++ , которая действительно заслуживает наибольшего внимания и уважения. И на то есть причины, которые мы рассмотрим далее.

Данная книга "", в исполнении легендарного автора Б. Страуструпа , дает полное описание языка, его ключевых понятий и основных приемов программирования на нем, что очень весомо, в первую очередь, конечно же, для новичка. Это полностью завершенное руководство, написанное создателем языка (ниже будет кратко рассказано об авторе), которое содержит описание всех средств языка программирования С++, в том числе управление исключительными ситуациями, шаблоны типа (параметризованные типы данных) и множественное наследование. Книга делится на три части: первые десять глав являются учебником, служащим введением в язык, включая подмножество собственно С, в трех последующих главах обсуждаются вопросы проектирования и создания программного обеспечения с помощью С++. Книга завершается полным справочным руководством по языку С++. Основные преимущества данной книги:

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

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

Бьерн Страуструп является разработчиком языка С++ и создателем первого транслятора. Я думаю, что с этого момента уже многие из вас поняли, почему именно данная книга заслуживает наибольшего внимания. Бьерн Страуструп - сотрудник научно-исследовательского вычислительного центра AT&T Bell Laboratories в Мюррей Хилл (Нью-Джерси, США). Он получил звание магистра математики и вычислительной техники в университете г. Аарус (Дания), а докторское звание по вычислительной технике в кэмбриджском университете (Англия). Он специализируется в области распределенных систем, операционных систем, моделирования и программирования. Вместе с М. А. Эллис Бьерн Страуструп является автором полного руководства по языку С++ - "Руководство по С++ с примечаниями".

Также очень важным моментом является то, что в конце каждой главы даются упражнения для самостоятельного выполнения. Игнорировать их, конечно же, ни в коем случае нельзя, т.к. именно теория, закрепленная практикой, является вашим золотым руном. Не зря было сказано, что "Лучший способ научиться программировать - это программировать!"