Математика | ||||
От Си к С++ - Е.Ж Козелд М,: Финансы я статистика, 1993,-272 с.: ил | ||||
От Си к С++ - Е.Ж Козелд М,: Финансы я статистика, 1993,-272 с.: ил
От Си к С++/ЕЖКозелд, Л.М.Романовская, Т.В.Русс и др.-| М,: Финансы я статистика, 1993,-272 с.: ил. ;л ISBN 5-279-01096-0. ; >. I \ ....... • ' '•< • • • - ;.'* (Книга содержит описание языка программирования C++ для персональным ЭВМ и рассчитана на пользователей, знакомых с языком Си. Даете* краткий обзор новых возможностей языка C++ по сравнению со стандартом языка СЦ Подробно описываются средства C++ для объектно-ориентированного програм*. мирования (классы как средство поддержки абстрактных типов данных, возмож| ности перегрузки фумший и операций» механизм наследования чере| порождение JUUICCOB, иир1уалыиое функци^ дяя реализации полиморфизма):! Длв профессиональны* программистов и^^специалистов по вычислительно* техник, а также студентов вуао» соответда^Я^ощих специальностей. .^ ПРЕДИСЛОВИЕ Язык C++ относится к .языкам объектно-ориентированного программирования и поэтому может рассматриваться как «зык нового поколения. Но C++ создан на основе языка Си, представляющего во многом традиционные концепции программирования, и благодаря этому освоение C++ не является трудной задачей, особенно для тех, кто знает язык,Си. '.' Эта книга как раз и адресуется этой категории программистов. Основное внимание в книге уделяется описанию тех новых возможностей, которые отличают C++ от Си и делают его языком объектно-ориентированного программирования. Главная особенность такого языка — это возможность определять новые типы данных так, что их использование ничем не будет отличаться от использования встроенных в язык типов данных. Новые типы данных должны в большей мере соответствовать понятиям той прикладной области, для которой разрабатывается программа, чем встроенные типы, ориентированные на архитектуру ЗЪТА. Три основные концепции объектно-ориентированного программирования (инкапсуляция, наследование, полиморфизм) присущи языку C++. * . " Инкапсуляция, или сокрытие данных, обеспечивается механиз- ' мом классов для определения новых типов данных (абстрактных типов данных). •*"' Наследование реализуется через возможность порождать иерархию классов, что позволяет при разработке новых проектов использо-к вать готовые классы и тем самым уменьшить затраты на разработку. Полиморфизм обеспечивается возможностью переопределять семантику операций и использовать одно и то же обозначение оне^; рации для манипулирования разными типами данных, •. • Книга логически делится на f ри части. Первую часть cocritA ляют введение и раздел 1. Эта часть представляет собой введение \ . • '*!*. • '' ' --*1' ' ' ' ' --- • СОДЕРЖАНИЕ Предисловие............... . ......................., . з Введение........................... ....... .1 .... 5 От процедурных к объектно-ориентированным языкам программирования . . 5 Основные свойства объектно-ориентированного программирования ....... 7 История развития C++........ ,............. .,........... 8 1. Обзор новых возможностей C++ ............«,. Л;...........ц 1,1; C++ как улучшение Си . . ........:....-............... И .1. Комментарии....................................ц .2. Константы................................... 12 .3. Встраиваемые функции. ......................... 13 .4. Объявления структур, смесей и перечислений......... t . . . . 15 .5. Объявление переменных.. ........ .'. .......... .: . . . 18 .6. Ссылки:.................................... 19 .7. Использование void.". ............. .'-.•........ . . .• 20 .8. Преобразование типов. ............ -...,...:....... 22 .9. Новые операции,.............................: 23 .10. Объявление функций........... .................... 25 : .11. Передача аргументов функции по ссылке. . . . '........... 26 .12. Передача аргументов по умолчанию................. . 29 . .13. Перегрузка функций......*...... ...............31 .14. Использование функций Си в программах C++............ 32 .15. Ввод-вывод.............•..,................32 1.2. C++ как Си с классами............... ..............34 .2.1. Определение класса. . ............................ 35 '' .2.2. Конструкторы и деструкторы......................... 38 .2.3. Перегрузка операций...........................-40 .2.4. Дружественные функции.............,..:..........42 ;2.5. Наследование..........................-."..' . . . 44 1.3. Классы, структуры, смеси: сходства и различия . .".............44 1.4. Совместимость Си и C++ .........................-. . . 45 ' 1.5. Стиль программирования.....;.................... . : 46 -. 2.'Классы . . . .'.Я .'..•;..... '.......;...'..... .... . ........ .47 1 2.1. Встроенные типы данных. Структуры ....................47 > 2.2. Определение класса . ...............................50 1 2.3- Область видимости. ............................... 53 268 2.4, Сокрытие информации............., . .....,..,.*... „ 55 2.5. Встраиваемые член-функции.........................56 . 2.6. Объявление объекта класса..................<.........57 2.7. Использование спецификатора класса памяти static.............58 2.8*. Члены класса const............................... . 61 2.9. Неявный указатель this...........................: . 62 2.10. Указатель на член класса,............. - ............... 66 2.11. Локальные классы ........•.....:.-...:............. .70 . ..2.12. Вложенные классы ..............,.'............'. . . . 71 2.13. Альтернативные реализации......................... 72 3. Специальный вид функций класса— конструкторы и деструкторы...... 75 3.1. Построение объектов в динамической памяти............ ..... . 75 3.2. Время жизни объекта.............................. 77 3.3. Конструктор. Инициализация объекта.................... 78 3.4. Деструктор . . . . :............;...................82 3.5. Член-данные — объекты другого класс*..................... 91 3.6. Копирование объектов класса .........................94 3.6.1. Копирование при инициализации . ................ ... 94 3.6.2. Копирование при присваивании.................. . .- . 99 3.6.3. Копирование объектов с член-данными другого класса.......102 3.7. Массив объектов класса J. ...... ,~. .^.-. .'.. .'.,:".•........ 106 3.8. Смеси — специальный вид класса . . . . ... . . ... 1 ......... 107 4. Дружественные функции................ .............. ПО 4.1. Дружественные глобальные функции.......• '•.........; 110 4.2. Дружественные член-функции . .'........ .............116 5. Преобразование типов...............................118 5.1. Стандартные преобразования ........... .............. 118 • 5.2. Явные преобразования ...........'.... ............. 122 5.3. Преобразования абстрактных типов данных ................ 124 5.3.1. Конструктор как операция преобразования гипа. . .........125 5.3.2. Операция приведения типа — член класса . . . .......... 128 6. Перегрузка функций................. .': ............. . 130 6.1. Что такое перегрузка функций....................... 130 6.2. Вызов функции при перегрузке . . ...................... 132 6.2.1. Точное соответствие.................. .'......'. . 134 6.2.2. Соответствие, достигаемое стандартными преобразованиями ... 138 6.2.3. Соответствие через преобразования, определенные пользователем 138 6.2.4. Двусмысленность................................ 141 • 6.3. Перегрузка функций с несколькими аргументами . . . . . . ... .•.., . 143 • . 6.4. Перегрузка функций с аргументами по умолчанию . . . .......... 145 6.5. Перегрузка и область видимости...................... 146 . 7. Перегрузка операций ..'................ .....;..,;... 147 7.1. Функции-операции................................ 147 7.2. Правила перегрузки операций................... ....... 150 7.3. Смысл операций ...... .'.!... . . . . ...../............. 153 7.4. Эквивалентность операций .. л........... . . ... .'. . .ч. . . • 153 7.5. Перегрузка операций и преобразование типов . ... . . ........ . 156 7.6. Ссылки и перегрузка операций . . . ....... ......... . • •-,158 7.7. Присваивание и инициализация............'. ...... • • • 162 7.8. Индексирование ...................... . . . . . < . . • • • 1М 7.9. Операция выбора элемента.... . ......... .- . . . . . . .'-. , •,- • '** 7.10. Перегрузка операций new и delete .-........ . . . . . . .'С .» • 169 7.11. Друзья или члены............................ . . ... 172 8. Ввод-вывод.................................... . . . 173 8.1. Ввод-вывод встроенных типов . .'....................... 173 8.2. Состояние потока ... . . ......................... . . 176 8.3. Ввод-вывод типов, определенных пользователем.............. 179 8.4. Форматизованный вывод...........'................, ... 181 8.5. Манипуляторы . .-. ,..........::.....,............. 185 8.6. Ввод-вывод файлов :.......................... ... . . 187 9. Обьектно-орненгированное программирование ................ 192 9.1. Инкапсуляция'................................... 192 9.2. Наследование................................ . . . . 194 9.3. Полиморфизм............;....................'.... 195 9.3.1. Статическое связывание........... .... ........... 196 9.3.2; Динамическое связывание .-.!-.. . ,.......... .... • • • -197 10. Порождение классов .......'........................ . .200 10.1. Определение порождения классов......................200. 10.2. Базовый класс • . .,. - . • .'...'........................202 10.2.1. Спецификатор доступа protected....................204 10.3. Порожденный класс ... ...... .'.........• • • • • • • • •.....205 10.3.1. Иерархия порожденных классов.................... 207 10.3.2. Объект порожденного класса......................208 , 10.4. Двступ к членам порожденного класса ................... 208 10.4.1. Доступ к наследуемым членам ..................... 209 10.4.2. Доступ к собственным членам ............. . . . ... . , . 210 10.5. Стандартные преобразования при порождении . . . . .......... 210 10.6. Инициализация объекта порожденного класса . .............212 10.6.1. Инициализация собственных членов ............•.....212 10.6.2. Инициализация наследуемых членов................ .-.'213 - , 10.6.3. Порядок инициализации при порождении ............. 214 10.6.4. Инициализация.объектом того же порожденного класса ..... 215 10.7. Порождения public и private ...... . . . ......... .......218 10.8. Порождение из нескольких базовых классов. ............... 220 10.8.1. Доступ к членам порожденного класса............... .-221 10.8.2. Объект порожденного класса ...... .'................ 221 10.8.3. Инициализация объектов порожденного класса . . . N.......222 10,8-4. Проблемы порождения иэ нескольких классов . .......... 222 10.9. Виртуальные базовые классы ......................... 225 10.9.1. Определение виртуального базового класса . .........,. . . 225 10.9.2. Инициализация виртуального базового класса ........... .- 227 10.9.3. Доступ к членам виртуального базового класса...........228 и.Вщггуалышефунжцп . . . ............................ . . . 229 11.1. Динамическое связывание '....... . . .......... ...:..... 229 " 11.2. Определение виртуальных функций • • • •................. 233 11.2.1. Абстрактный класс .. ................. .". ........ 234 . 11.2.2. Правила определения виртуальных функций :............ 234 11.2.3. Видимость виртуальных функций : ...... '. , . . ........ 237 11.3. Вызов виртуальных функций......................... 238 11.3.1. Когда вызов виртуальной функции не является виртуальным .. 240 аЬ^Виргушлымедаструиоры ,---.;.................., 241 12. Другие аспекты аорождимв: классов............. . . ........ 243 12.1. Присваивание объектов порожденного класса .....:..... . . . . 243 J2;2. Преобразование порожденных типов . . . , . . ....... .... . . . 244 12.3. Перегрузка функций с аргументами-порожденнымм классами . . . . 246 12.4. Использование дружественных функций и классов при порождении . 248 12.5. Преобразование указателей на члены класса.............. 250 ПРИЛОЖЕНИЕ. Полный пример объектно-ориентированной программы................. . •......... . . . 252 Литература .........,...... ......... . ...../....... 267 Цена: 200руб. |
||||