с++ руководство для начинающих Второе издание A B e g i n n e r 's G u i de Second Edition HERBERT SCHILDT McGraw-Hill/Osborne New York Chicago San Francisco Lisbon London Madrid Mexico City Milan New Delhi San Juan Seoul Singapore Sydney Toronto руководство для начинающих Второе издание ГЕРБЕРТ ШИЛДТ вильямс ¥ Москва • Санкт-Петербург • Киев 2005 ББК 32.973.26-018.2.75 Ш57 УДК 681.3.07 Издательский дом "Вильяме" Зав. редакцией С.Н. Тригуб Перевод с английского и редакция КМ. Ручко По общим вопросам обращайтесь в Издательский дом "Вильяме" по адресу: [email protected], http://www.williamspublishing.com 115419, Москва, а/я 783; 03150, Киев, а/я 152 Шилдт, Герберт. Ш57 C++: руководство для начинающих, 2-е издание. : Пер. с англ. — М. : Издатель- ский дом "Вильяме", 2005. — 672 с. : ил. — Парал. тит. англ. ISBN 5-8459-0840-Х (рус.) В этой книге описаны основные средства языка C++, которые необходимо ос во- шь начинающему программисту. После рассмотрения элементарных понятий (переменных, операторов, инструкций управления, функций, классов и объектов) читатель легко перейдет к изучению таких более сложных тем, как перегрузка опе- раторов, механизм обработки исключительных ситуаций (исключений), наследова- ние, полиморфизм, виртуальные функции, средства ввода-вывода и шаблоны. Автор справочника — общепризнанный авторитет в области программирования на язы ках С и C++, Java и С# — включил в свою книгу множество тестов для самоконтроля, которые позволяют быстро проверить степень освоения материала, а также разделы "вопросов и ответов", способствующие более глубокому изучения основ програм- мирования даже на начальном этапе. ББК 32.973.26-018.2.75 Все названия программных продуктов являются зарегистрированными торговыми марками соответствующих фирм. Никакая часть настоящего издания ни в каких целях не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами, будь то электронные или механические, включая фотокопирова- ние и запись на магнитный носитель, если на это нет письменного разрешения издательства Osbome Media. Authorized translation from the English language edition published by Osborne Publishing, Copyright © 2004 by The McGraw-Hill Companies. All rights reserved. No part of this 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 from the Publisher. Russian language edition published by Williams Publishing House according to the Agreement with R&I Enterprises International, Copyright © 2005 ISBN 5-8459-0840-Х (рус.) © Издательский дом "Вильяме", 2005 ISBN 0-07-223215-3 (англ.) ' © The McGraw-Hill Companies, 2004 Оглавление Об авторе 15 Введение 17 Модуль 1. Основы C++ 21 Модуль 2. Типы данных и операторы 69 Модуль 3. Инструкции управления 109 Модуль 4. Массивы, строки и указатели 157 Модуль 5. Введение в функции 211 Модуль 6. О функциях подробнее 261 Модуль 7. Еще о типах данных и операторах 303 Модуль 8. Классы и объекты 349 Модуль 9. О классах подробнее 397 Модуль 10. Наследование 465 Модуль 11. С++-система ввода-вывода 521 Модуль 12. Исключения, шаблоны и кое-что еще 571 Приложение А. Препроцессор 639 Приложение Б. Использование устаревшего С++-компилятора 653 Предметный указатель 656 Содержание Об авторе 15 Введение . 17 Как организована эта книга 17 Практические навыки 18 Тест для самоконтроля 18 Вопросы для текущего контроля 18 Спросим у опытного программиста 18 Учебные проекты 18 Никакого предыдущего опыта в области программирования не требуется 18 Требуемое программное обеспечение 19 Программный код — из Web-пространства 19 Для дальнейшего изучения программирования 19 Модуль 1. Основы C++ 21 1.1. Из истории создания C++ 22 Язык С: начало эры современного программирования 23 Предпосылки возникновения языка C++ 24 Рождение C++ 25 Эволюция C++ 26 1.2. Связь C++ с языками Java и С# 27 1.3. Объектно-ориентированное программирование 29 Инкапсуляция 30 Полиморфизм 31 Наследование , 32 1.4. Создание, компиляция и выполнение С++-программ 32 Ввод текста программы 34 Компилирование программы 34 Выполнение программы 35 Построчный "разбор полетов" первого примера программы 36 Обработка синтаксических ошибок 38 1.5. Использование переменных 40 1.6. Использование операторов 41 1.7. Считывание данных с клавиатуры 44 Вариации на тему вывода данных 46 Познакомимся еще с одним типом данных 47 1.8. Использование инструкций управления if и for 52 C++: руководство для начинающих Инструкция if 52 ЦИКЛ for 54 1.9. Использование блоков кода 56 Точки с запятой и расположение инструкций 58 Практика отступов 59 1.10. Понятие о функциях 62 Библиотеки C++ 64 1.12. Ключевые слова C++ 65 1.13. Идентификаторы . 66 Модуль 2. Типы данных и операторы 69 Почему типы данных столь важны 70 2.1. Типы данных C++ 70 Целочисленный тип 72 Символы 75 Типы данных с плавающей точкой 77 Тип данных bool 78 Тип void 80 2.2. Литералы 83 Шестнадцатеричные и восьмеричные литералы 84 Строковые литералы 84 Управляющие символьные последовательности 85 2.3. Создание инициализированных переменных 87 Инициализация переменной 87 Динамическая инициализация переменных 88 Операторы 89 2.4. Арифметические операторы 89 Инкремент и декремент 90 2.5. Операторы отношений и логические операторы 92 2.6. Оператор присваивания 98 2.7. Составные операторы присваивания 99 2.8. Преобразование типов в операторах присваивания 100 Выражения 101 2.9. Преобразование типов в выражениях 101 Преобразования, связанные с типом bool 102 2.10. Приведение типов 102 2.11. Использование пробелов и круглых скобок 104 8 Содержание Модуль 3. Инструкции управления 109 3.1. Инструкция if 110 Условное выражение 112 Вложенные if-инструкции 114 "Лестничная" конструкция if-else-if 115 3.2. Инструкция switch 117 Вложенные инструкции switch 121 3.3. Цикл for 125 Вариации на тему цикла for 127 Отсутствие элементов в определении цикла 129 Бесконечный цикл for 130 Циклы без тела 131 Объявление управляющей переменной цикла в заголовке инструкции for 132 3.4. Цикл while 134 3.6. Использование инструкции break для выхода из цикла 143 3.7. Использование инструкции continue 145 3.8. Вложенные циклы 151 3.9. Инструкция goto 152 Модуль 4. Массивы, строки и указатели 157 4.1. Одномерные массивы 158 На границах массивов без пограничников 162 4.2. Двумерные массивы 153 4.3. Многомерные массивы 165 4.4. Строки 159 Основы представления строк 169 Считывание строк с клавиатуры 170 4.5. Некоторые библиотечные функции обработки строк 173 Функция strcpy() 173 Функция strcat() 173 Функция strcmp() 173 Функция strlen() 174 Пример использования строковых функций 174 Использование признака завершения строки 175 4.6. Инициализация массивов 177 Инициализация "безразмерных" массивов 180 4.7. Массивы строк 182 4.8. Указатели 183 C++: руководство для начинающих Что представляют собой указатели 184 4.9. Операторы, используемые с указателями 185 О важности базового типа указателя 186 Присваивание значений с помощью указателей 189 4.10. Использование указателей в выражениях 190 Арифметические операции над указателями 190 Сравнение указателей 192 4.11. Указатели и массивы 193 Индексирование указателя 196 Строковые константы 198 Массивы указателей 203 Соглашение о нулевых указателях 205 4.12. Многоуровневая непрямая адресация 206 Модуль 5. Введение в функции 2ЛЛ Основы использования функций 212 5.1. Общий формат С++-функций 212 5.2. Создание функции 213 5.3. Использование аргументов 215 5.4. Использование инструкции return 216 Возврат значений 220 5.5. Использование функций в выражениях 222 Правила действия областей видимости функций 224 5.6. Локальная область видимости 225 5.7. Глобальная область видимости 231 5.8. Передача указателей и массивов в качестве аргументов функций 235 Передача функции указателя 235 Передача функции массива 237 Передача функциям строк 240 5.9. Возвращение функциями указателей 242 Функция main() 243 5.10. Передача аргументов командной строки функции main() 244 Передача числовых аргументов командной строки 246 5.11. Прототипы функций 248 Стандартные заголовки содержат прототипы функций 250 5.12. Рекурсия 250 Модуль 6.0 функциях подробнее 261 6.1. Два способа передачи аргументов 262 6.2. Как в C++ реализована передача аргументов 262