ebook img

Самоучитель C++ PDF

687 Pages·2003·65.553 MB·Russian
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Самоучитель C++

Г. Шилдт САМОУЧИТЕЛЬ e издание переработанное и дополненное Наследование, полиморфизм, инкапсуляция Исключительные ситуации Шаблоны и контейнеры Пространства имен •Динамическая идентификация типа •Библиотека стандартных шаблонов к книге прилагается дискета Herbert Schildt Teach Yourself C++ Third Edition Osborne McGraw-Hill Герберт Шилдт Самоучитель C++ 3-е издание Санкт-Петербург «БХВ-Петербург» 2003 УДК 681.3.06 Шилдт Г. Самоучитель C++: Пер. с англ. — 3-е изд. — СПб.: БХВ-Петербург, 2003. — 688 с. ISBN 5-7791-0086-1 Необходимость в переработке и дополнении предыдущего издания книги вызвана в первую очередь выходом в свет долгожданного для программистов всего мира еди- ного международного стандарта по C++. Теперь можно быть уверенным, что уже в ближайшем будущем программы на C++ будут выглядеть и функционировать оди- наково, независимо от того, в какой среде программирования и для какого компи- лятора они написаны. В книге сохранен весь материал двух предыдущих изданий, а также добавлено несколько новых глав и множество новых разделов. Эта книга - наиболее удобное руководство для самостоятельного изучения C++ в соответствии с требованиями нового стандарта и рассчитана на читателей, уже владеющих язы- ком программирования С. Методика подачи материала предполагает строго после- довательное изучение глав, содержащих множество примеров программ, а также упражнений для проверки и повторения пройденного материала. Для программистов и опытных пользователей УДК 681.3.06 Группа подготовки издания: Главный редактор Вадим Сергеев Зав. редакцией Алексеи Жданов Перевод с английского Алексея Жданова Компьютерная верстка: Ольги Сергиенко, Натальи Боговой Корректор Зинаида Дмитриева Дизайн обложки Дмитрия Солнцева, Елены Клыковой Зав. производством Николай Тверских Authorized translation from the English language edition published by Osborne McGraw-Hill. Copyright © (998. All rights reserved. No part of mis book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission in writing from the Publisher. Russian language edition published by BHV — St. Petersburg. Copyright © 1998. Авторизованный перевод английской редакции, выпушенной Osborne McGraw-Hill. Copyright © 1998. Все права защищены. Никакая часть настоящей книги не может быть воспроизведена или передана в какой бы то пи было форме и какими бы то ни было средствами, будь то электронные или механические, включая фотокопирование и запись на магнитный носитель, если на то нет письменного разрешения издательства. Русская редакция выпушена BHV—-Санкт-Петербург. Copyright О 1998. Лицензия ИД NB 02429 от 24.07.00. Подписано в печать 25.06.03. Формат 70*100'/ . Печать офсетная. Усл. печ. л. 55,5. Доп. тир1аВж 3000 экз. Заказ No 942 "6ХВ-Петербург", 198005, Санкт-Петербург, Измайловский пр., 29. Гигиеническое заключение на продукцию, товар Г* 77.99.02.953.Д.001537.03.02 от 13.03.2002 г. выдано Департаментом ГСЭН Минздрава России. Отпечатано с готовых диапозитивов в Академической типографии "Наука" РАН 199034, Санкт-Петербург, Элиния, 12. ISBN 0-07-882392-7 (англ.) С 1998 by Osborne McGraw-Hill ISBN 5-7791-0086-1 (рус.) О Перевод на русский язык "БХ В-Сан кг-Петербург", 199Й Введение Если вы уже знаете язык программирования С и хотели бы теперь заняться изучением C++ — эта книга для вас. C++ — это попытка решения разработчиками языка С задач объектно- ориентированного программирования (Object Oriented Programming, OOP). Построенный на твердом фундаменте С, C++ помимо OOP поддерживает множество других полезных инструментов, не жертвуя при этом ни мощью, ни элегантностью, ни гибкостью С. C++ уже стал универсальным языком для программистов всего мира, языком, на котором будет написано следующее поколение высокоэффективного программного обеспечения. Это единствен- ный серьезный язык, который просто обязан знать любой уважающий себя профессиональный программист. C++ был разработан сотрудником научно-исследовательского центра AT&T Bell Laboratories (Нью-Джерси, США) Бьярном Страуструпом в 1979 году. Первоначальное название "С с классами" было изменено на C++ в 1983 году. Начиная с 1980 года C++ претерпел две существенные модернизации: в 1985 и 1990 годах. Последняя, третья модернизация связана с процессом стандарти- зации C++. Несколько лет назад началась работа по созданию единого меж- дународного стандарта по C++. Для этой цели был сформирован объединенный комитет по стандартизации ANSI (American National Standards Institute, Американский национальный институт стандартов) и ISO (International Standards Organization, Международная организация по стандар- там) для языка C++. Первый рабочий проект указанного стандарта был пред- ставлен 25 января 1994 года. Комитет ANSI/ISO по C++ (членом которого являлся автор этой книги Герберт Шилдт) фактически сохранил все основные черты языка, заложенные туда еще Страуструпом и добавил несколько новых инструментов. В своей основе этот первый проект лишь отражал положение, в котором в то время находился язык C++. Вскоре после завершения работы над первым проектом стандарта произошло событие, которое в конечном итоге и привело к его значительному расшире- нию: Александр Степанов создал библиотеку стандартных шаблонов (Standard Template Library, STL). Как вы в дальнейшем узнаете, библиотека стандартных шаблонов устанавливает набор основополагающих процедур, которые можно использовать для обработки данных. Библиотека стандартных шаблонов — это мощный и элегантный инструмент программирования, но одновременно и очень объемный. Сразу после появления первого проекта стандарта комитет ANSI/ISO проголосовал за включение библиотеки стандартных шаблонов в спецификацию C++, что привело к значительному расширению C++ по сравнению с исходным определением этого языка. Несомненно став значи- тельным событием в области программирования, создание библиотеки стан- Самоучитель C++ дартных шаблонов тем не менее привело к некоторому замедлению процесса стандартизации C++. Справедливости ради надо сказать, что процесс стандартизации C++ отнял значительно больше времени, чем можно было предположить, когда он толь- ко начинался. Тем не менее, он близок к завершению. Комитетом ANSI/ISO разработан и предложен окончательный вариант проекта, который ожидает лишь формального одобрения. С практической точки зрения стандарт для C++- стал наконец реальностью. В появляющихся сейчас компиляторах под- держиваются все новые атрибуты C++. Предлагаемый в книге материал учит языку программирования C++ в соот- ветствии с новым стандартом этого языка (Standard C++). Именно эта версия предложена комитетом ANSI/ISO и именно она в настоящее время принята на вооружение основными производителями компиляторов. Таким образом, можно быть уверенным, что книга, которую вы начали изучать сегодня, завтра окажется столь же полезной. Отличия третьего издания Сейчас вы держите в руках третье издание книги " Самоучитель C++". В ней сохранен весь материал двух предыдущих изданий, а также добавлены две но- вые главы и множество новых разделов. В первой из этих двух глав описыва- ется динамическая идентификация типа (Run-Time Type Identification, RTTI) и новые, недавно разработанные операторы приведения типов. Во второй гла- ве рассказывается о библиотеке стандартных шаблонов. Обе эти темы посвя- щены тем главным инструментам, которые были добавлены в C++ уже после выхода в свет предыдущего издания. В новых разделах других глав вы узнаете о пространствах имен, новом стиле оформления заголовков и современной системе ввода/вывода C++. Таким образом, третье издание книги "Само- учитель C++" оказалось существенно больше предыдущих. Если вы работаете под Windows Если на вашем компьютере установлена операционная система Windows, и вы хотите научиться писать программы для Windows, то C++ -- это именно тот язык, который вам нужен. C++ полностью соответствует задачам программи- рования под Windows. Тем не менее ни одна из программ, предлагаемых в книге, не предназначена для работы в этой операционной системе. Наоборот, все эти программы запускаются из командной строки. Причина очевидна: программы для Windows по самой своей сути большие и сложные. По самым скромным подсчетам, для создания даже простейшей программы для Windows требуется от 50 до 70 строк исходного кода. При написании каждой такой программы для демонстрации возможностей языка C++ потребовалось бы написать тысячи строк исходного кода. Проще говоря, Windows — это не са- мая подходящая среда для изучения языка программирования. Тем не менее Введение 7_ для компиляции предлагаемых в книге программ вполне подходит компиля- тор, работающий в среде Windows, поскольку при выполнении программ он автоматически перейдет в консольный режим. Когда вы в совершенстве овладеете C++, вы несомненно сумеете применить свои знания для программирования под Windows. Действительно, программи- рование на C++ под Windows позволяет пользоваться библиотеками классов, например, библиотекой классов MFC (Microsoft Foundation Classes), что суще- ственно упрощает разработку приложений. Кроме этого, интерфейс любого приложения под Windows достаточно просто создать с помощью таких средств визуального программирования, как Visual C++ 5 или Borland C++ 5. Сердце- виной же любого профессионального приложения является программная реа- лизация его идеи, а отнюдь не пользовательский интерфейс, пусть даже самый что ни на есть дружественный. Другими словами, эта книга учит не созданию пользовательского интерфейса в стиле Windows, а собственно языку программирования C++. Как организована эта книга Эта книга является по-своему уникальной, поскольку учит языку программи- рования C++, опираясь на передовую методику обучения. Эта методика пред- полагает знакомство на каждом занятии с единственной темой, дополненной для лучшего ее усвоения примерами и упражнениями. Такой подход гаранти- рует, что перед тем как перейти к следующей теме, вы полностью освоите предыдущую. Материал книги представлен в определенном порядке. Поэтому изучайте ее последовательно, от главы к главе. В каждой новой главе предполагается, что вы уже освоили материал всех предыдущих. Во всех главах, за исключением главы 1, имеются упражнения для проверки ваших знаний предыдущей главы, упражнения для проверки усвоения материала текущей главы, а также упраж- нения для проверки усвоения всего изученного на данном этапе материала. Ответы на упражнения находятся в приложении В в конце книги. В книге предполагается, что вы уже являетесь состоявшимся программистом на языке С. Проще говоря, гораздо легче учиться программировать на C++, когда уже умеешь это делать на С. Если вы еще не умеете программировать на С, то перед тем как взяться за эту книгу, лучше потратить некоторое время на его изучение. Исходные коды программ Исходные коды представленных в книге программ можно найти либо на при- лагаемой дискете, описание которой находится в приложении D в конце книги, либо в Internet по адресу http://www.osborne.com. Использование этих кодов освободит вас от необходимости набирать их вручную. Глава 1 Краткий обзор C++ C++ -- это расширенная версия языка С. C++ содержит в себе все, что имеется в С, но кроме этого он поддерживает объектно-ориентированное программирование (Object Oriented Programming, OOP). В C++ имеется множество дополнительных возможностей, которые независимо от объект- но-ориентированного программирования делают его просто "лучше, чем С", За небольшими исключениями C++ — это более совершенный С. В то вре- мя как все, что вы знаете о языке С, вполне применимо и к C++, понима- ние его новых свойств все же потребует от вас значительных затрат времени и сил. Однако преимущества программирования на C++ с лихвой окупят ваши усилия. Целью этой главы должно стать знакомство с некоторыми наиболее важны- ми свойствами C++. Как вы знаете, элементы языка программирования не существуют в пустоте, изолированно от других. Они работают вместе в виде полной, законченной конструкции. В C++ эта взаимозависимость еще бо- лее ярко выражена, чем в С. В результате, трудно обсуждать любой аспект C++ без других его аспектов. Поэтому первая глава посвящена предвари- тельному знакомству с теми свойствами C++, без которых сложно понять приводимые здесь примеры программ. Более подробно эти свойства будут изучаться в следующих главах. Эта глава также освещает некоторые отличия между стилями программиро- вания на языках С и C++. В C++ имеется несколько возможностей для написания более гибких, чем в С, программ. Хотя некоторые из этих воз- можностей имеют очень слабую связь с объектно-ориентированным програм- мированием, или вообще ее не имеют, тем не менее, поскольку они содер- жатся в большинстве программ C++, стоит обсудить их в первую очередь. Поскольку C++ был задуман для поддержки объектно-ориентированного программирования, эта глава начинается с описания OOP. Как вы увидите, многие свойства C++ тем или иным образом касаются OOP. Однако важно понимать, что C++ может использоваться для написания не только объект- но-ориентированных программ. То, как вы используете C++, полностью зависит от вас. К моменту написания этой книги процесс стандартизации языка програм- мирования C++ был завершен. По этой причине здесь описываются неко- 10 _ Самоучитель C++ торые важные отличия между обычными для последних нескольких лет вер- сиями C++ и новым стандартом языка (Standard C++). Поскольку настоя- щая книга задумывалась как пособие для обучения языку Standard C++, этот материал особенно важен для тех, кто работает с устаревшим компиля- тором. Помимо знакомства с некоторыми важными свойствами C++, в этой главе описываются существующие отличия между стилями программирования С и C++. Есть несколько аспектов C++, которые позволяют писать программы с большей гибкостью. Некоторые из этих аспектов C++ имеют очень незна- чительную связь с объектно-ориентированным программированием или во- обще ее не имеют, но поскольку они встречаются в большинстве программ на C++, стоит обсудить их в начале книги. Перед тем как начать собственно изложение материала, имеет смысл сде- лать несколько важных замечаний о природе и форме C++. Как правило, программы на C++ внешне напоминают программы на С. Так же, как и на С, программы на C++ начинают выполняться с функции mainQ. Для полу- чения аргументов командной строки C++ использует те же параметры argc, argv, что и С. Хотя C++ определяет их в собственной объектно- ориентированной библиотеке, он также поддерживает все функции стан- дартной библиотеки С. В C++ используются те же управляющие структуры и те же встроенные типы данных, что и в С. Запомните, в этой книге предполагается, что вы уже знаете язык програм- мирования С. Проще говоря, вы уже должны уметь программировать на С перед тем, как начнете изучать программирование на C++. Если вы еще не знаете С, то желательно потратить некоторое время на его изучение. В этой книге предполагается, что вы знаете, как компилировать и выполнять программу, используя компилятор C++. Если это не так, вам следует обра- титься к соответствующему руководству пользователя. (Из-за отличий в ком- пиляторах дать в этой книге инструкцию для работы с любым из них не представляется возможным.) Поскольку программирование лучше изучать в работе, вам настоятельно рекомендуется вводить, компилировать и запус- кать приводимые в книге примеры программ в том порядке, в котором они представлены. 1.1. Что такое объектно-ориентированное программирование? Объектно -ориентире ванное программирование — это новый подход к соз- данию программ. По мере развития вычислительной техники возникали разные методики программирования. На каждом этапе создавался новый подход, который помогал программистам справляться с растущим усложне-

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.