Смекни!
smekni.com

Правила правой руки 17 Замечания для программистов на c 17 Глава 1 (стр. 1 из 43)

Бьярн Страустрап; Введение в язык Си++

Содержание 1

Предисловие 8

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

Заметки для читателя 10

Структура этой книги 10

Замечания по реализации 11

Упражнения 11

Замечания по проекту языка 11

Исторические замечания 12

Эффективность и структура 13

Философские замечания 15

Размышления о программировании на C++ 15

Правила правой руки 17

Замечания для программистов на C 17

Глава 1

Турне по C++ 18

1.1 Введение 18

1.1.1 Вывод 18

1.1.2 Компиляция 19

1.1.3 Ввод 20

1.2 Комментарии 21

1.3 Типы и Описания 21

1.3.1 Основные Типы 21

1.3.2 Производные Типы 23

1.4 Выражения и Операторы 23

1.4.1 Выражения 23

1.4.2 Операторы Выражения 24

1.4.3 Пустой оператор 24

1.4.4 Блоки 24

1.4.5 Операторы if 25

1.4.6 Операторы switch 25

1.4.7 Оператор while 26

1.4.8 Оператор for 26

1.4.9 Описания 27

1.5 Функции 27

1.6 Структура программы 28

1.7 Классы 30

1.8 Перегрузка операций 31

1.9 Ссылки 32

1.10 Конструкторы 33

1.11 Вектора 34

1.12 Inline-подстановка 35

1.13 Производные классы 36

1.14 Еще об операциях 37

1.15 Друзья (friend) 39

1.16 Обобщенные Вектора 40

1.17 Полиморфные Вектора 40

1.18 Виртуальные функции 42

Глава 2

Описания и Константы 43

2.1 Описания 43

2.1.1 Область Видимости 44

2.1.2 Объекты и Адреса (Lvalue) 46

2.1.3 Время Жизни 46

2.2 Имена 47

2.3 Типы 47

2.3.1 Основные Типы 48

2.3.2 Неявное Преобразование Типа 49

2.3.3 Производные Типы 50

2.3.4 Тип void 51

2.3.5 Указатели 51

2.3.6 Вектора 52

2.3.7 Указатели и Вектора 54

2.3.8 Структуры 55

2.3.9 Эквивалентность типов 57

2.3.10 Ссылки 58

2.3.11 Регистры 60

2.4 Константы 61

2.4.1 Целые Константы 61

2.4.2 Константы с Плавающей Точкой 62

2.4.3 Символьные Константы 62

2.4.4 Строки 63

2.4.5 Ноль 64

2.4.6 Const 64

2.4.7 Перечисления 65

2.5 Экономия Пространства 66

2.5.1 Поля 66

2.5.2 Объединения 67

2.6 Упражнения 69

Глава 3

Выражения и операторы 71

3.1 Настольный калькулятор 71

3.1.1 Программа синтаксического разбора 71

3.1.2 Функция ввода 76

3.1.3 Таблица имен 78

3.1.4 Обработка ошибок 80

3.1.5 Драйвер 81

3.1.6 Параметры командной строки 82

3.2 Краткая сводка операций 83

3.2.1 Круглые скобки 85

3.2.2 Порядок вычисления 85

3.2.2 Увеличение и уменьшение* 86

3.2.4 Побитовые логические операции 87

3.2.5 Преобразование типа 88

3.2.6 Свободная память 89

3.3 Сводка операторов 92

3.3.1 Проверки 93

3.3.2 Goto 95

3.4 Комментарии и Выравнивание 96

3.5 Упражнения 97

Глава 4

Функции и Файлы 100

4.1 Введение 100

4.2 Компоновка 101

4.3 Заголовочные Файлы 102

4.3.1 Один Заголовочный Файл 104

4.3.2 Множественные Заголовочные Файлы 107

4.3.3 Скрытие Данных 109

4.4 Файлы как Модули 110

4.5 Как Создать Библиотеку 111

4.6 Функции 112

4.6.1 Описания Функций 112

4.6.2 Определения Функций 112

4.6.3 Передача Параметров 113

4.6.4 Возврат Значения 114

4.6.5 Векторные Параметры 115

4.6.6 Параметры по Умолчанию 116

4.6.7 Перегрузка Имен Функций 117

4.6.8 Незаданное Число Параметров 119

4.6.9 Указатель на Функцию 120

4.7 Макросы 124

4.8 Упражнения 125

Глава 5

Классы 128

5.1 Знакомство и краткий обзор 128

5.2 Классы и Члены 129

5.2.1 Функции Члены 129

5.2.2 Классы 130

5.2.3 Ссылки на Себя 131

5.2.4 Инициализация 132

5.2.5 Очистка 134

5.2.6 Inline 135

5.3 Интерфейсы и Реализации 135

5.3.1 Альтернативные Реализации 136

5.3.2 Законченный Класс 139

5.4 Друзья и Объединения 142

5.4.1 Друзья 142

5.4.2 Уточнение* Имени Члена 144

5.4.3 Вложенные Классы 144

5.4.4 Статические Члены 145

5.4.5 Указатели на Члены 146

5.4.6 Структуры и Объединения 147

5.5 Конструкторы и Деструкторы 149

5.5.1 Предостережение 150

5.5.2 Статическая Память 150

5.5.3 Свободная Память 152

5.5.4 Объекты Класса и Члены 152

5.5.5 Вектора Объектов Класса 154

5.5.6 Небольшие Объекты 155

5.5.7 Предостережение 156

5.5.8 Объекты Переменного Размера 157

5.6 Упражнения 158

Глава 6

Перегрузка Операций 160

6.1 Введение 160

6.2 Функции Операции 161

6.2.1 Бинарные и Унарные Онерации 161

6.2.2 Предопределенные Значения Операций 162

6.2.3 Операции и Определяемые Пользователем Типы 162

6.3 Определяемое Преобразование Типа 163

6.3.1 Конструкторы 164

6.3.2 Операции Преобразования 164

6.3.3 Неоднозначности 166

6.4 Константы 167

6.5 Большие Объеты 167

6.6 Присваивание и Инициализация 168

6.7 Индексирование 170

6.8 Вызов Функции 172

6.9 Класс Строка 173

6.10 Друзья и Члены 177

6.11 Предостережение 177

6.12 Упражнения 178

Глава 7

Производные Классы 181

7.1 Введение 181

7.2 Производные Классы 182

7.2.1 Построение Производного Класса 182

7.2.2 Функции Члены 183

7.2.3 Видимость 184

7.2.4 Указатели 186

7.2.5 Иерархия Типов 187

7.2.6 Конструкторы и Деструкторы 187

7.2.7 Поля Типа 188

7.2.8 Виртуальные Функции 190

7.3 Альтернативные Интерфейсы 192

7.3.1 Интерфейс 192

7.3.2 Реализация 193

7.3.3 Как Этим Пользоваться 194

7.3.4 Обработка Ошибок 196

7.3.5 Обобщенные Классы 197

7.3.6 Ограниченные Интерфейсы 199

7.4 Добавление к Классу 199

7.5 Неоднородные Списки 201

7.6 Законченна Программа 201

7.6.1 Администратор Экрана 201

7.6.2 Библиотека Фигур 203

7.6.3 Прикладная Программа 207

7.7 Свободная Память 209

7.8 Упражнения 210

Глава 8

Потоки 212

8.1 Введение 212

8.2 Вывод 213

8.2.1 Вывод Встроенных Типов 213

8.2.2 Вывод Типов, Определяемых Пользователем 214

8.2.3 Некоторые Подробности Разработки 214

8.2.4 Форматированный Вывод 216

8.2.5 Виртуальная Функция Вывода 218

8.3 Файлы и Потоки 219

8.3.1 Инициализация Потоков Вывода 219

8.3.2 Закрытие Потоков Вывода 220

8.3.3 Открытие Файлов 220

8.3.4 Копирование Потоков 221

8.4 Ввод 221

8.4.1 Ввод Встроенных Типов 221

8.4.2 Состояния Потока 223

8.4.3 Ввод Типов, Определяемых Пользователем 224

8.4.4 Инициализация Потоков Ввода 225

8.5 Работа со Строками 226

8.6 Буферизация 226

8.7 Эффективность 228

8.8 Упражнения 228

1. ВВЕДЕНИЕ 230

2. ДОГОВОРЕННОСТИ О ЛЕКСИКЕ 230

2.1 Комментарии 230

2.2 Идентификаторы (имена) 230

2.3 Ключевые слова 230

2.4 Константы 231

2.4.1 Целые константы 231

2.4.2 Явно заданные длинные константы 231

2.4.3 Символьные константы 231

2.4.4 Константы с плавающей точкой 232

2.4.5 Перечислимые константы 232

2.4.6 Описанные константы 232

2.5 Строки 232

2.6 Харктеристики аппаратного обеспечения 232

3. ЗАПИСЬ СИНТАКСИСА 233

4. ИМЕНА И ТИПЫ 233

4.1 Область видимости 234

4.2 Определения 234

4.3 Компоновка 234

4.4 Классы памяти 235

4.5 Основные типы 236

4.4 Производные типы 236

5. ОБЪЕКТЫ И LVALUE(АДРЕСА) 237

6. ПРЕОБРАЗОВАНИЯ 237

6.1 Символы и целые 237

6.2 Float и double 237

6.3 Плавающие и целые 237

6.4 Указатели и целые 238

6.5 Unsigned 238

6.6 Арифметические преобразования 238

6.7 Преобразования указателей 239

6.8 Преобразования ссылок 239

7. ВЫРАЖЕНИЯ 239

7.1 Основные выражения 240

7.2 Унарные операции 241

7.2.1 Увеличение и Уменьшение 242

7.2.2 Sizeof 242

7.2.3 Явное Преобразование Типа 243

7.2.4 Свободная Память 243

7.3 Мультипликативные операции 244

7.4 Аддитивные операции 244

7.5 Операции сдвига 245

7.6 Операции отношения 245

7.7 Операции равенства 246

7.8 Операция побитовое И 246

7.9 Операция побитовое исключающее ИЛИ 246

7.10 Операция побитовое включающее ИЛИ 246

7.11 Операция логическое И 246

7.12 Операция логическое ИЛИ 246

7.13 Условная операция 247

7.14 Операции присваивания 247

7.15 Операция запятая 247

7.16 Перегруженные операции 248

7.16.1 Унарные операции 248

7.16.2 Бинарные операции 248

7.16.3 Особые операции 248

8. ОПИСАНИЯ 249

8.1 Спецификаторы класса памяти 249

8.2 Спецификаторы Типа 250

8.3 Описатели 251

8.4 Смысл описателей 252

8.4.1 Примеры 254

8.5 Описания классов 256

8.5.1 Статические члены 257

8.5.2 Функции члены 257

8.5.3 Производные классы 259

8.5.4 Виртуальные функции 259

8.5.5 Конструкторы 260

8.5.6 Преобразования 261

8.5.7 Деструкторы 261

8.5.8 Видимость имен членов 261

8.5.9 Друзья (friends) 262

8.5.10 Функция операция 263

8.5.11 Структуры 263

8.5.12 Объединения 263

8.5.13 Поля бит 263

8.5.14 Вложенные классы 264

8.6 Инициализация 264

8.6.1 Список инициализаторов 265

8.6.2 Классовые объекты 266

8.6.3 Ссылки 266

8.6.4 Массивы символов 267

8.7 Имена типов 267

8.8 Определение типа typedef 268

8.9 Перегруженные имена функций 269

8.10 Описание перечисления 270

8.11 Описание Asm 270

9. ОПЕРАТОРЫ 271

9.1 Оператор выражение 271

9.2 Составной оператор, или блок 271

9.3 Условный оператор 271

9.4 Оператор while 271

9.5 Оператор do 272

9.6 Оператор for 272

9.7 Оператор switch 273

9.8 Оператор break 273

9.9 Оператор continue 274

9.10 Оператор return 274

9.11 Оператор goto 274

9.12 Помеченные операторы 274

9.13 Пустой оператор 274

9.14 Оператор delete 275

9.15 Оператор asm 275

10. ВНЕШНИЕ ОПРЕДЕЛЕНИЯ 275

10.1 Определения функций 275

10.2 Определения внешних данных 276

11. ПРАВИЛА ОБЛАСТИ ВИДИМОСТИ 276

12. КОМАНДНЫЕ СТРОКИ КОМПИЛЯТОРА 276

12.1 Замена идентификаторов 277

12.2 Включение файлов 277

12.3 Условная компиляция 277

12.4 Управление строкой 278

13. НЕЯВНЫЕ ОПИСАНИЯ 278

14. ОБЗОР ТИПОВ 278

14.1 Классы 278

14.2 Функции 278

14.3 Массивы, указатели и индексирование 279

14.4 Явные преобразования указателей 279

15. КОНСТАНТНЫЕ ВЫРАЖЕНИЯ 280

16. СООБРАЖЕНИЯ МОБИЛЬНОСТИ 281

17. СВОБОДНАЯ ПАМЯТЬ 281

18. КРАТКОЕ ИЗЛОЖЕНИЕ СИНТАКСИСА 282

18.1 Выражения 282

18.2 Описания 283

18.3 Операторы 285

18.4 Внешние определения 286

18.5 Препроцессор 286

19. ОТЛИЧИЯ ОТ "СТАРОГО C" 286

19.1 Расширения 286

Предисловие

Язык формирует наш способ мышления

и определяет, о чем мы можем мыслить.

Б.Л. Ворф

C++ - универсальный язык программирования, задуманный так, чтобы

сделать программирование более приятным для серьезного

программиста. За исключением второстепенных деталей C++ является

надмножеством языка программирования C. Помимо возможностей,

которые дает C, C++ предоставляет гибкие и эффективные средства

определения новых типов. Используя определения новых типов, точно