Справочник по C, Полный справочник по C
Скачать 393.9 Kb.
|
Об авторе Герберт Шилдт (Herbert Schildt) — признанный авторитет в области програм- мирования на языках C, C++ Java и C#, профессиональный Windows-програм- мист, член комитетов ANSI/ISO, принимавших стандарт для языков C и C++. Продано свыше 3 миллионов экземпляров его книг. Они переведены на все самые распространенные языки мира. Шилдт — автор таких бестселлеров, как Полный справочник по C, Полный справочник по C++, Полный справочник по C#, Полный справочник по Java 2, и многих других книг, включая: Руководство для начинаю- щих по C, Руководство для начинающих по C# и Руководство для начинающих по Java 2. Шилдт — обладатель степени магистра в области вычислительной техни- ки (университет шт. Иллинойс). Его контактный телефон (в консультационном отделе): (217) 586-4683. Содержание Об авторе 15 Введение 17 Как организована эта книга 17 Практические навыки 18 Тест для самоконтроля 18 Вопросы для текущего контроля 18 Спросим у опытного программиста 18 Учебные проекты 18 Никакого предыдущего опыта в области программирования не требуется 18 Требуемое программное обеспечение 19 Программный код — из Web-пространства 19 Для дальнейшего изучения программирования 19 Модуль 1. Основы C++ 21 1.1. Из истории создания C++ 22 Язык C: начало эры современного программирования 23 Предпосылки возникновения языка C++ 24 Рождение C++ 25 Эволюция C++ 26 1.2. Связь C++ с языками Java и C# 27 1.3. Объектно-ориентированное программирование 29 Инкапсуляция 30 Полиморфизм 31 Наследование 32 1.4. Создание, компиляция и выполнение C++-программ 32 Ввод текста программы 34 Компилирование программы 34 Выполнение программы 35 Построчный “разбор полетов” первого примера программы 36 Обработка синтаксических ошибок 38 1.5. Использование переменных 40 1.6. Использование операторов 41 1.7. Считывание данных с клавиатуры 44 Вариации на тему вывода данных 46 Познакомимся еще с одним типом данных 47 1.8. Использование инструкций управления if и for 52 С++: руководство для начинающих 7 Инструкция 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. Двумерные массивы 163 4.3. Многомерные массивы 165 4.4. Строки 169 Основы представления строк 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 С++: руководство для начинающих 9 Что представляют собой указатели 184 4.9. Операторы, используемые с указателями 185 О важности базового типа указателя 186 Присваивание значений с помощью указателей 189 4.10. Использование указателей в выражениях 190 Арифметические операции над указателями 190 Сравнение указателей 192 4.11. Указатели и массивы 193 Индексирование указателя 196 Строковые константы 198 Массивы указателей 203 Соглашение о нулевых указателях 205 4.12. Многоуровневая непрямая адресация 206 Модуль 5. Введение в функции 211 Основы использования функций 212 5.1. Общий формат C++-функций 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. О функциях подробнее 261 6.1. Два способа передачи аргументов 262 6.2. Как в C++ реализована передача аргументов 262 10 Содержание 6.3. Использование указателя для обеспечения вызова по ссылке 264 6.4. Ссылочные параметры 266 6.5. Возврат ссылок 271 6.6. Независимые ссылки 275 Ограничения при использовании ссылок 276 6.7. Перегрузка функций 277 Автоматическое преобразование типов и перегрузка 282 6.8. Аргументы, передаваемые функции по умолчанию 292 Сравнение возможности передачи аргументов по умолчанию с перегрузкой функций 294 Об использовании аргументов, передаваемых по умолчанию 296 6.9. Перегрузка функций и неоднозначность 298 Модуль 7 303 Еще о типах данных и операторах 303 7.1. Спецификаторы типа const и volatile 304 Спецификатор типа const 304 Спецификатор типа volatile 307 Спецификаторы классов памяти 308 Спецификатор класса памяти auto 308 7.2. Спецификатор класса памяти extern 308 7.3. Статические переменные 310 7.4. Регистровые переменные 315 7.5. Перечисления 318 7.6. Ключевое слово typedef 322 7.7. Поразрядные операторы 322 Поразрядные операторы И, ИЛИ, исключающее ИЛИ и НЕ 323 7.8. Операторы сдвига 330 7.9. Оператор “знак вопроса” 339 7.10. Оператор “запятая” 340 7.11. Составные операторы присваивания 342 7.12. Использование ключевого слова sizeof 343 Сводная таблица приоритетов C++-операторов 345 Модуль 8. Классы и объекты 349 8.1. Общий формат объявления класса 350 8.2. Определение класса и создание объектов 351 8.3. Добавление в класс функций-членов 357 8.4. Конструкторы и деструкторы 367 С++: руководство для начинающих 11 8.5. Параметризованные конструкторы 370 Добавление конструктора в класс Vehicle 373 Альтернативный вариант инициализации объекта 374 8.6. Встраиваемые функции 376 Создание встраиваемых функций в объявлении класса 378 8.7. Массивы объектов 388 8.8. Инициализация массивов объектов 389 8.9. Указатели на объекты 391 Модуль 9. О классах подробнее 397 9.1. Перегрузка конструкторов 398 9.2. Присваивание объектов 399 9.3. Передача объектов функциям 402 Конструкторы, деструкторы и передача объектов 403 Передача объектов по ссылке 405 Потенциальные проблемы при передаче параметров 407 9.4. Возвращение объектов функциями 408 9.5. Создание и использование конструктора копии 411 9.6. Функции-“друзья” 415 9.7. Структуры и объединения 421 Структуры 421 Объединения 424 9.8. Ключевое слово this 428 9.9. Перегрузка операторов 430 9.10. Перегрузка операторов с использованием функций-членов 431 О значении порядка операндов 435 Использование функций-членов для перегрузки унарных операторов 435 9.11. Перегрузка операторов с использованием функций-не членов класса 441 Использование функций-“друзей” для перегрузки унарных операторов 447 Советы по реализации перегрузки операторов 448 Модуль 10. Наследование 465 10.1. Понятие о наследовании 466 Доступ к членам класса и наследование 470 10.2. Управление доступом к членам базового класса 474 10.3. Использование защищенных членов 477 10.4. Вызов конструкторов базового класса 483 12 Содержание 10.5. Создание многоуровневой иерархии 493 10.6. Наследование нескольких базовых классов 497 10.7. Когда выполняются функции конструкторов и деструкторов 498 10.8. Указатели на производные типы 501 Ссылки на производные типы 502 10.9. Виртуальные функции и полиморфизм 502 Понятие о виртуальной функции 502 Наследование виртуальных функций 506 Зачем нужны виртуальные функции 507 Применение виртуальных функций 509 10.10. Чисто виртуальные функции и абстрактные классы 514 Модуль 11. C++-система ввода-вывода 521 Сравнение старой и новой C++-систем ввода-вывода 522 11.1. Потоки C++ 523 Встроенные C++-потоки 524 11.2. Классы потоков 524 11.3. Перегрузка операторов ввода-вывода 526 Создание перегруженных операторов вывода 527 Использование функций-“друзей” для перегрузки операторов вывода 529 Перегрузка операторов ввода 530 Форматированный ввод-вывод данных 533 11.4. Форматирование данных с использованием функций-членов класса ios 533 11.5. Использование манипуляторов ввода-вывода 540 11.6. Создание собственных манипуляторных функций 543 Файловый ввод-вывод данных 545 11.7. Как открыть и закрыть файл 546 11.8. Чтение и запись текстовых файлов 549 11.9. Неформатированный ввод-вывод данных в двоичном режиме 551 Считывание и запись в файл блоков данных 554 11.10. Использование других функций ввода-вывода 556 Версии функции get() 557 Функция getline() 558 Функция обнаружения конца файла 559 Функции peek() и putback() 559 Функция flush() 559 С++: руководство для начинающих 13 11.11. Произвольный доступ 565 11.12. Получение информации об операциях ввода-вывода 568 Модуль 12. Исключения, шаблоны и кое-что еще 571 12.1. Обработка исключительных ситуаций 572 Основы обработки исключительных ситуаций 572 Использование нескольких catch-инструкций 578 Перехват всех исключений 581 Определение исключений, генерируемых функциями 583 Повторное генерирование исключения 585 Шаблоны 587 12.2. Обобщенные функции 587 Функция с двумя обобщенными типами 590 Явно заданная перегрузка обобщенной функции 591 12.3. Обобщенные классы 594 Явно задаваемые специализации классов 597 12.4. Динамическое распределение памяти 603 Инициализация динамически выделенной памяти 607 Выделение памяти для массивов 608 Выделение памяти для объектов 609 12.5. Пространства имен 614 Понятие пространства имен 615 Инструкция using 619 Неименованные пространства имен 622 Пространство имен std 622 12.6. Статические члены класса 623 Статические члены данных класса 623 Статические функции-члены класса 626 12.7. Динамическая идентификация типов (RTTI) 628 12.8. Операторы приведения типов 633 Оператор dynamic_cast 633 Оператор const_cast 635 Оператор static_cast 635 Оператор reinterpret_cast 635 Приложение А. Препроцессор 639 Директива #define 640 Макроопределения, действующие как функции 642 Директива #error 644 14 Содержание Директива #include 644 Директивы условной компиляции 645 Директивы #if, #else, #elif и #endif 645 Директивы #ifdef и #ifndef 648 Директива #undef 649 Использование оператора defined 649 Директива #line 650 Директива #pragma 650 Операторы препроцессора “#” и “##” 651 Зарезервированные макроимена 652 Приложение Б. Использование устаревшего C++-компилятора 653 Два простых изменения 655 Предметный указатель 656 Введение Язык C++ предназначен для разработки высокопроизводительного программ- ного обеспечения и чрезвычайно популярен среди программистов. При этом он обеспечивает концептуальный фундамент (синтаксис и стиль), на который опираются другие языки программирования. Не случайно ведь потомками C++ стали такие почитаемые языки, как C# и Java. Более того, C++ можно назвать универсальным языком программирования, поскольку практически все профес- сиональные программисты на том или ином уровне знакомы с C++. Изучив C++, вы получите фундаментальные знания, которые позволят вам освоить любые аспекты современного программирования. Цель этой книги — помочь читателю овладеть базовыми элементами C++-про- граммирования. Сначала, например, вы узнаете, как скомпилировать и выпол- нить C++-программу, а затем шаг за шагом будете осваивать более сложные темы (ключевые слова, языковые конструкции, операторы и пр.). Текст книги подкре- пляется многочисленными примерами программ, тестами для самоконтроля и учебными проектами, поэтому, проработав весь материал этой книги, вы получи- те глубокое понимание основ C++-программирования. Я хочу подчеркнуть, что эта книга — лишь стартовая площадка. C++ — это большой (по объему средств) и не самый простой язык программирования. Не- обходимым условием успешного программирования на C++ является знание не только ключевых слов, операторов и синтаксиса, определяющего возможности языка, но и библиотек классов и функций, которые существенно помогают в раз- работке программ. И хотя некоторые элементы библиотек рассматриваются в этой книге, все же большинство из них не нашло здесь своего отражения. Чтобы стать первоклассным программистом на C++, необходимо в совершенстве изу- чить и C++-библиотеки. Знания, полученные при изучении этой книги, позволят вам освоить не только библиотеки, но и все остальные аспекты C++. Как организована эта книга Эта книга представляет собой самоучитель, материал которого равномерно распределен по разделам, причем успешное освоение каждого следующего пред- полагает знание всех предыдущих. Книга содержит 12 модулей, посвященных со- ответствующим аспектам C++. Уникальность этой книги состоит в том, что она включает несколько специальных элементов, которые позволяют закрепить уже пройденный материал. 18 Введение Практические навыки Все модули содержат разделы (отмеченные пиктограммой “Важно!”), которые важно не пропустить при изучении материала книги. Их значимость для после- довательного освоения подчеркивается тем, что они пронумерованы и перечис- лены в начале каждого модуля. Тест для самоконтроля Каждый модуль завершается тестом для самоконтроля. Ответы можно найти на Web-странице этой книги по адресу: http://www.osborne.com. Вопросы для текущего контроля В конце каждого значимого раздела содержится тест, проверяющий степень вашего понимания ключевых моментов, изложенных выше. Ответы на эти во- просы приводятся внизу соответствующей страницы. Спросим у опытного программиста В различных местах книги вы встретите специальные разделы “Спросим у опытно- го программиста”, которые содержат дополнительную информацию или интересные комментарии по данной теме. Эти разделы представлены в формате “вопрос-ответ”. Учебные проекты Каждый модуль включает один или несколько проектов, которые показыва- ют, как на практике можно применить изложенный здесь материал. Эти учебные проекты представляют собой реальные примеры, которые можно использовать в качестве стартовых вариантов для ваших программ. Никакого предыдущего опыта в области программирования не требуется Для освоения представленного здесь материала никакого предыдущего опыта в области программирования не требуется. Поэтому, если вы никогда раньше не программировали, можете смело браться за эту книгу. Конечно же, в наши дни многие читатели уже имеют хотя бы минимальный опыт в программировании. Например, вам, возможно, уже приходилось писать программы на Java или C#. Как вы скоро узнаете, C++ является “родителем” обоих этих языков. Поэтому, если вы уже знакомы с Java или C#, то вам не составит труда освоить и C++. С++: руководство для начинающих |