С++ для начинающих - Учебное пособие

Изменения в третьем издании

Все изменения можно разбить на четыре основные категории:

материал, посвященный нововведениям языка: обработке исключений, идентификации типа во время выполнения, пространству имен, встроенному типу bool, новому синтаксису приведения типов;

материал, посвященный стандартной библиотеке С++, в том числе типам complex, string, auto_ptr, pair, последовательным и ассоциативным контейнерам (в основном это list, vector, map и set) и обобщенным алгоритмам;

коррективы  в старом  тексте,  отражающие  улучшения,  расширения  и  изменения,  которые новый стандарт С++ привнес в существовавшие ранее средства языка. Примером улучшения может служить использование предваряющих объявлений для вложенных типов, ранее отсутствовавшая.  В качестве примера изменения можно привести  возможность для экземпляра  виртуальной  функции  производного  класса  возвращать  тип,  производный  от типа  значения,  возвращаемого  экземпляром  той  же  функции  из  базового  класса.  Это изменение поддерживает операцию с классами,  которую иногда  называют клонированием или фабрикацией классов (виртуальная функция clone() иллюстрируется в разделе 17.5.7). Пример   расширения   языка –   возможность   явно   специализировать   один   или   более параметров-типов для шаблонов функций (на самом деле, весь механизм шаблонов был радикально расширен – настолько, что его можно назвать новым средством языка!);

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

Будущее С++

Во время публикации  книги комитет по стандартизации  С++ ISO/ANSI  закончил техническую работу по подготовке первого международного стандарта С++. Стандарт опубликован Международным комитетом по стандартизации (ISO) летом 1998 года.

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

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

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

Благодарности

 

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

На разных стадиях работы над рукописью многие люди вносили различные полезные замечания:  Пол  Эбрахамс  (Paul  Abrahams),  Майкл  Болл  (Michael  Ball),  Стивен  Эдвардс (Stephen Edwards), Кэй Хорстманн (Cay Horstmann), Брайан Керниган (Brian Kernighan), Том Лайонс (Tom Lyons), Роберт Мюррей (Robert Murray), Эд Шейбель (Ed Scheibel), Рой Тэрнер (Roy Turner),  Йон  Вада  (Jon Wada).  Особо нам хочется  поблагодарить  Майкла  Болла  за важные комментарии и поддержку. Мы благодарим Кловис Тондо (Clovis Tondo) и Брюса Леюнга (Bruce Leung) за вдумчивую рецензию.

Стен  выражает  особо  теплую  благодарность  Ши-Чюань  Хуань  (Shyh-Chyuan  Huang)  и Джинко Гото (Jinko Gotoh) за их помощь  в работе над рассказом о Жар-Птице (Firebird), Иона Ваду и, конечно, Джози.

Джози  благодарит  Габби  Зильберман  (Gabby Silbermarr),  Карен  Беннет  (Karen Bennet),  а также команду Центра углубленных исследований (Centre for Advanced Studies) за поддержку во время написания книги. И выражает огромную благодарность Стену за привлечение к работе над книгой.

Мы оба хотим поблагодарить замечательный редакторский коллектив за их упорную работу и   безграничное   терпение:   Дебби   Лафферти   (Debbie   Lafferty),   которая   не   оставляла вниманием эту книгу с самого первого издания, Майка Хендриксона (Mike Hendrickson) и Джона Фуллера (John Fuller). Компания Big Purple Company проделала замечательную работу по набору книги. Иллюстрация в разделе 6.1 принадлежит Елене Дрискилл (Elena Driskill). Мы благодарим ее за разрешение перепечатки.

Благодарности во втором издании

Эта книга явилась результатом работы множества остающихся за сценой людей, помогавших автору. Наиболее сердечные благодарности мы приносим Барбаре Му (Barbara Moo). Ее поддержка,  советы,  внимательное  чтение  бесчисленных  черновиков  книги  просто неоценимы. Особые благодарности Бьярну Страуструпу за постоянную помощь и поддержку и за прекрасный язык, который он подарил нам, а также Стивену Дьюхерсту (Stephen Dewhurst), который так много помогал мне при освоении С++, и Ненси Уилкинсон (Nancy Wilkinson) – коллеге по работе над cfront.

Дэг Брюк (Dag Bruck), Мартин Кэрролл (Martin Carroll), Уильям Хопкинс (William Hopkins), Брайан Керниган (Brian Kernighan), Эндрю Кениг (Andrew Koenig), Алексис Лейтон (Alexis Layton)  и  Барбара  Му  (Barbara  Moo)  помогали  нам  особо  ценными  замечаниями.  Их рецензии значительно улучшили качество книги. Энди Бейли (Andy Baily), Фил Браун (Phil Brown), Джеймс Коплиен (James Coplien), Элизабет Флэнаган (Elizabeth Flanagan), Дэвид Джордан (David Jordan), Дон Кретч (Don Kretsch), Крейг Рубин (Craig Rubin), Джонатан Шопиро (Jonathan Shopiro), Джуди Уорд (Judy Ward), Ненси Уилкинсон (Nancy Wilkinson) и Клей  Уилсон  (Clay  Wilson)  просмотрели  множество  черновиков  книги  и  дали  много полезных комментариев. Дэвид Проссер (David Prosser) прояснил множество вопросов, касающихся ANSI C.

Джерри Шварц (Jerry Schwarz), автор библиотеки iostream, обеспечил нас оригинальной документацией, которая легла в основу Приложения А (глава 20 в третьем издании). Мы высоко  оцениваем  его замечания  к этому  Приложению.  Мы  благодарим  всех  остальных

 

членов команды, работавшей на версией 3.0: Лауру Ивс (Laura Eaves), Джорджа Логотетиса

(George Logothetis), Джуди Уорд (Judy Ward) и Ненси Уилкинсон (Nancy Wilkinson).

Джеймс Эдкок (James Adcock), Стивен Белловин (Steven Bellovin), Йон Форрест (Jon Forrest), Морис Эрлих (Maurice Herlihy), Норман Керт (Norman Kerth), Даррелл Лонг (Darrell Long), Виктор Миленкович (Victor Milenkovic) и Джастин Смит (Justin Smith) рецензировали книгу для издательства Addison-Wesley.

Дэвид Беккердорф (David Beckedorff), Дэг Брюк (Dag Bruck), Джон Элбридж (John Eldridge), Джим  Хьюмелсин  (Jim  Humelsine),  Дэйв  Джордан  (Dave  Jordan),  Эми  Клейнман  (Ami Kleinman),  Эндрю  Кениг  (Andrew  Koenig),  Тим  О'Конски  (Tim  O'Konski),  Кловис  Тондо (Clovis Tondo) и Стив Виноски (Steve Vinoski) указали на ошибки в первом издании.

Я выражаю глубокую благодарность Брайану Кернигану (Brian Kernighan) и Эндрю Кенигу

(Andrew Koenig) за программные средства для типографского набора текста.

Список литературы

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

[BOOCH94] Booch, Grady, Object-Oriented Analysis and Design, Benjamin/Cummings. Redwood

City, CA (1994) ISBN 0-8053-5340-2.

[GAMMA95] Gamma, Erich, Richard Helm, Ralph Johnson, and John Vlissides, Design Patterns, Addison Wesley Longman, Inc., Reading, MA (1995) ISBN 0-201-63361-2.

[GHEZZI97] Ghezzi, Carlo, and Mehdi Jazayeri, Programming Language Concepts, 3rd Edition, John Wiley and Sons, New York, NY (1997) ISBN 0-471-10426-4.

[HARBISON88] Samuel P. Harbison and Guy L. Steele, Jr., C: A Reference Manual, 3rd Edition, Prentice-Hall, Englewood Cliffs, NJ (1988) ISBN 0-13-110933-2.

[ISO-C++97]  Draft  Proposed  International  Standard  for  Information  Systems  —  Programming

Language C++ – Final Draft (FDIS) 14882.

[KERNIGHAN88] Kernighan, Brian W.I. and Dennis M. Ritchie, The C Programming Language, Prentice-Hall, Englewood Cliffs, NJ (1988) ISBN 0-13-110362-8.

[KOENIG97] Koenig, Andrew, and Barbara Moo, Ruminations on C++, Addison Wesley Longman, Inc., Reading, MA (1997) ISBN 0-201-42339-1.

[LIPPMAN91]  Lippman,  Stanley,  C++  Primer,  2nd  Edition,  Addison  Wesley  Longman,  Inc., Reading, MA (1991) ISBN 0-201-54848-8.

[LIPPMAN96a] Lippman, Stanley, Inside the C++ Object Model, Addison Wesley Longman, Inc., Reading, MA (1996) ISBN 0-201-83454-5.

[LIPPMAN96b]  Lippman,  Stanley,  Editor,  C++  Gems,  a  SIGS  Books  imprint,  Cambridge

University Press, Cambridge, England (1996) ISBN 0-13570581-9.

[MEYERS98] Movers, Scott, Effective C++, 2nd Edition, Addison Wesley Longman, Inc., Reading, MA (1998) ISBN 0-201-92488-9.

[MEYERS96] Meyers, Scott, More Effective C++, Addison Wesley Longman, Inc., Reading, MA (1996) ISBN 0-201-63371-X.

 

[MURRAY93]  Murray Robert B., C++ Strategies  and Tactics, Addison Wesley Longman, Inc., Reading, MA (1993) ISBN 0-201-56382-7.

[MUSSER96]  Musser,  David R.,  and Atui Saint,  STL Tutorial and Reference Guide,  Addison

Wesley Longman, Inc., Reading, MA (1996) ISBN 0-201-63398-1.

[NACKMAN94] Barton, John J., and Lee R. Nackman, Scientific and Engineering C++, An Introduction with Advanced Techniques and Examples, Addison Wesley Longman, Inc., Reading, MA (1994) ISBN 0-201-53393-6.

[NEIDER93] Neider, Jackie, Tom Davis, and Mason Woo, OpenGL Programming Guide, Addison

Wesley Inc., Reading, MA (1993) ISBN 0-201-63274-8.

[PERSON68] Person, Russell V., Essentials of Mathematics, 2nd Edition, John Wiley & Sons, Inc., New York, NY (1968) ISBN 0-132-84191-6.

[PLAUGER92] Plauger, P.J., The Standard C Library, Prentice-Hall, Englewood Cliffs, NJ (1992) ISBN 0-13-131509-9.

[SEDGEWICK88]  Sedgewick, Robert, Algorithms,  2nd Edition, Addison Wesley Longman, Inc., Reading, MA (1988) ISBN 0-201-06673-4.

[SHAMPINE97]  Shampine,  L.E,  R.C.  Alien,  Jr.,  and  S.  Pruess,  Fundamentals  of  Numerical

Computing, John Wiley & Sons, Inc., New York, NY (1997) ISBN 0-471-16363-5.

[STROUSTRUP94]  Stroustrup,  Bjarne,  The  Design  and  Evolution  of  C++,  Addison  Wesley

Longman, Inc., Reading, MA (1994) ISBN 0-201-54330-3.

[STROUSTRUP97]  Stroustrup,  Bjarne, The C++ Programming Language,  3rd Edition, Addison

Wesley Longman, Inc., Reading, MA (1997) ISBN 0-201-88954-4.

[UPSTILL90] Upstill, Steve, The RenderMan Companion, Addison Wesley Longman, Inc., Reading, MA (1990) ISBN 0-201-50868-0.

[WERNECKE94] Wernecke, Josie, The Inventor Mentor, Addison Wesley Longman, Inc., Reading, MA (1994) ISBN 0-201-62495-8.

[YOUNG95] Young, Douglas A., Object-Oriented Programming with C++ and OSF/ Motif, 2nd

Edition, Prentice-Hall, Englewood Cliffs, NJ (1995) ISBN 0-132-09255-7.