- •Предисловие
- •Введение
- •Введение в программирование
- •1.1. Предисловие к курсу
- •1.2. Идеология языка
- •1.3. Обзор среды Microsoft Developer Studio
- •1.4. Жизненный цикл программного обеспечения
- •1.5. Общая структура программы
- •1.6. Директивы препроцессора
- •1.7. Построение исполняемого файла
- •1.8. Строительные блоки программы
- •Контрольные вопросы
- •Типы данных. Переменные. Массивы. Операции и Указатели
- •Стандартные типы и размеры данных
- •2.1.1. Объявление переменных
- •Управляющие символьные константы
- •2.2. Объявление указателя
- •2.2.1. Операции разыменования и взятия адреса
- •2.2.2. Указатели на указатели
- •2.2.3. Арифметические операции с указателями
- •2.3. Массивы
- •2.3.1. Инициализация массивов
- •2.3.2 Динамические массивы
- •2.3.3. Методы доступа к элементам массивов
- •2.3.4. Массивы указателей
- •2.4. Строки
- •2.5. Операции
- •2.5.1. Арифметические операции
- •Арифметические операции
- •2.5.2 Операции сравнения и логические операции
- •Операции сравнения и логические операции
- •2.5.3. Побитовые операции
- •Побитовые операции
- •Контрольные вопросы
- •3.1. Базовые операторы
- •3.1.1. Оператор выражение
- •3.2.2. Оператор switch
- •3.3.4. Оператор goto
- •3.4. Операторы цикла
- •3.4.1. Оператор for
- •3.4.2. Оператор while
- •3.4.3. Оператор do..While
- •Контрольные вопросы
- •Стандартный ввод/вывод. Работа с файлами.
- •4.1. Роль стандартного ввода/вывода
- •4.1.1. Основные функции стандартного ввода/вывода
- •4.2. Понятие файла
- •4.2.1. Строение файлов
- •4.2.2. Порядок работы с файлом
- •4.2.3. Обзор библиотечных функций с для работы с файлами
- •4.3. Программные конструкции при работе с файлами
- •4.3.1. Открытие/закрытие файла
- •4.3.2. Цикл посимвольного чтения содержимого файла
- •4.3.3. Цикл построчного чтения содержимого файла
- •Контрольные вопросы
- •Функция. Пользовательские типы данных.
- •5.1. Понятие функции
- •5.1.1. Определение функции
- •5.1.2. Формальные параметры
- •5.1.3. Тип возвращаемого значения
- •5.1.4. Тело функции
- •5.1.5. Фактические параметры
- •5.1.6. Рекурсивные вызовы
- •5.1.7. Передача параметров
- •5.1.8. Библиотеки стандартных функций
- •5.2. Пользовательские типы данных.
- •5.2.1. Ключевое слово typedef
- •5.2.2. Перечислимый тип данных
- •5.2.3. Понятие структуры
- •5.2.4. Указатели на структурный объект
- •Контрольные вопросы
- •Работа с динамической памятью. Динамические структуры данных
- •6.1. Работа с динамической памятью
- •6.1.1. Статическое и динамическое распределение памяти
- •6.1.2. Основные принципы динамического распределения
- •6.1.3. Способы работы с динамической памятью
- •6.2. Динамические структуры данных
- •6.2.1. Стек
- •6.2.2.Линейный список
- •Контрольные вопросы
- •Объектно-ориентированное программирование
- •7.1. Критерии качества декомпозиции проекта
- •7.2. Новые концепции программирования
- •7.3. Достоинства ооп
- •7.4. Объекты и классы в ооп
- •7.4.1. Определение класса
- •7.4.2. Использование класса
- •7.4.3. Вложенные классы
- •Контрольные вопросы
- •Конструкторы и Перегрузка операций.
- •8.1. Перегрузка операций
- •8.1.1. Перегрузка операций внешними функциями
- •8.1.2. Перегрузка операций методами класса
- •8.2. Конструкторы и деструктор
- •8.2.1. Конструкторы и параметры
- •Контрольные вопросы
- •9.1. Простое открытое наследование
- •9.1.1 Конструкторы и деструкторы при наследовании
- •9.1.2. Поля и методы при наследовании
- •9.1.3. Вложенные классы и наследование
- •9.1.4. Закрытое наследование
- •9.1.5. Виртуальные функции
- •9.1.6. Чистые виртуальные функции и абстрактные классы
- •9.3. Основы программирования под Windows
- •9.3.1. Типы данных в Windows
- •9.4. Cреда Microsoft Developer Studio
- •9.4.1. Библиотека mfc
- •9.4.2. Архитектура приложения
- •9.4.3. Каркас приложения
- •9.4.4. Проект приложения
- •Контрольные вопросы
- •Заключение
- •Список Литературы
Управляющие символьные константы
Оператор |
Действие |
\b |
Пробел |
\f |
Прогон бумаги |
\n |
Новая строка |
\r |
Возврат каретки |
\t |
Горизонтальная табуляция |
\” |
Двойная кавычка |
\’ |
Одинарная кавычка |
\0 |
Нуль |
\\ |
Обратная косая черта |
\v |
Вертикальная табуляция |
\a |
Звуковой сигнал |
\? |
Знак вопроса |
\N |
Восьмеричная константа N |
\xN |
Шестнадцатеричная константа N |
Самые используемые служебные символы: перевод строки (код 13), возврат каретки (код 10), табуляция (код 9). Для задания их в программе в виде символьных констант используется сочетание двух видимых символов, а именно “\n”, “\r”, “\t” соответственно. Для представления символа “слэш“ используется конструкция “\\”.
В языке С существуют четыре спецификатора хранения: extern, static, register, auto.
Эти спецификаторы сообщают компилятору, как хранить объявленную переменную. Общий вид объявления, использующего эти спецификаторы:
спецификатор_хранения тип имя_переменной
Главное предназначение спецификатора extern указать, что объявляемый объект обладает внешними связями в рамках всей программы. В большинстве случаев объявление переменной одновременно является ее определением. Однако, указав перед именем переменной спецификатор extern, можно объявить ее не определяя.
Если локальная переменная объявлена с помощью спецификатора static, компилятор выделит для нее постоянное место для хранения, как и для глобальной переменной.
Применение спецификатора static к глобальной переменной заставляет компилятор создавать глобальную переменную, видимую только в пределах текущего файла. Несмотря на то, что эта переменная остается глобальной, в других файлах она не существует.
Спецификатор register был разработан для того, чтобы компилятор сохранял значение переменной в регистре центрального процессора, а не в памяти, как обычно. Это означает, что операции над регистровыми переменными выполняются намного быстрее.
2.2. Объявление указателя
Указатель – это переменная, содержащая адрес другой переменной. В С/С++ указатели играют исключительно важную роль. Они позволяют создавать очень быстрые и компактные программы, но при этом могут стать источником трудноуловимых ошибок.
Формат объявления указателя:
Тип*Имя;
Несмотря на то, что адреса ячеек одинаковы, указатели имеют разные типы. Для хранения адреса ячейки типа int требуется указатель на тип int, для хранения адреса ячейки типа char требуется указатель на тип char и т.д. Указатели на различные типы данных не обязательно должны иметь одинаковую длину. Пример:
unsigned int *a; //* переменная-указатель на тип unsigned
int */ double *x; //* переменная-указатель на тип double
Как и любая переменная, указатель, объявленный внутри тела функции, содержит случайное начальное значение. Если записать значение по этому адресу, то вероятно, произойдет аварийное завершение программы или зависание, поскольку С++ не контролирует принадлежность ячеек памяти. Чтобы этого избежать, инициализируйте указатели нулем. Пример:
int *a=NULL;
char *b=NULL;
float *c=NULL;