
- •Структуры
- •Массив структур
- •Указатели на структуру
- •Битовые поля
- •Объединения
- •Перечисления
- •Переименование типов
- •Открытие файла
- •Функции работы с файлами
- •Форматный ввод/вывод
- •Ввод/вывод строк. Функции позиционирования
- •Чтение из двоичного файла и запись в него
- •Свойства ООП
- •1.1 Свойства ООП
- •Понятие класса в С++
- •1.2 Понятие класса С++
- •Создание класса
- •1.3 Создание класса
- •Члены класса
- •1.4 Члены класса
- •Инкапсуляция
- •1.5. Инкапсуляция
- •1.6 Функции-члены класса
- •Реализация понятия «дата» при помощи структуры
- •1.7 Реализация понятия «дата» при помощи структуры
- •Реализация понятия «дата» при помощи класса
- •1.8 Реализация понятия «дата» при помощи класса
- •Определение и вызов функций–членов класса
- •Выводы. Примеры
- •1.9 Выводы
- •1.10 Пример создания класса
- •Конструкторы
- •2.1 Конструкторы
- •2.2 Пример класса без конструктора
- •2.3 Пример класса с конструктором
- •2.4. Конструктор с параметрами по умолчанию
- •2.5. Деструкторы
- •2.6. Пример класса с конструктором и деструктором
- •2.7. Подставляемые или inline функции.
- •2.8. Подставляемые функции-члены.
- •2.9. Указатель this
- •2.10. Использование указателя this
- •Дружественные функции
- •3.1 Дружественные функции
- •3.2 Пример дружественной функции
- •3.3 Дружественные классы
- •3.4. Уточнение имени элемента.
- •3.5. Определение переменных непосредственно перед использованием
- •3.6. Статические элементы класса.
- •2.7. Пример
- •Перегруженные функции
- •4. Перегрузка функций и операций
- •4.1 Полиморфизм
- •4.2 Перегруженные функции
- •4.3 Перегрузка конструктора
- •4.4 Выбор экземпляра функции
- •4.5 Перегрузка стандартных операций
- •4.6 Перегрузка операций сложения и присваивания
- •4.7 Перегрузка операций ++ и --
- •4.8 Дружественные функции-операции
- •4.9 Перегрузка операции индексации []
- •4.10 Аргументы по умолчанию
- •5. Работа с объектами
- •5.1 Ссылки в С++
- •5.2 Передача объектов, как аргументов функции
- •5.3 Массивы объектов
- •5.4 Указатель на объект
- •5.5 Динамическое выделение памяти. Операторы new, delete.
- •5.6 Локальные классы
- •5.7 Вложенные классы
- •5.8 Имена заголовочных файлов в С++
- •5.9 Строковые переменные в С++.
- •6. Наследование
- •6.1 Понятие наследования
- •6.2 Базовые и производные классы
- •6.3 Одиночное и множественное наследование
- •6.4 Управление доступом производных классов
- •6.5 Пример
- •6.6 Конструкторы с параметрами при наследовании
- •6.7 Конструкторы при множественном наследовании
- •7. Виртуальные функции. абстрактные классы
- •7.1 Указатели на производные типы
- •7.2 Виртуальные функции
- •7.3 Пример
- •7.4 Чистые виртуальные функции и абстрактные типы
- •7.5 Виртуальные базовые классы
- •7.6 Шаблоны
- •7.7 Шаблоны функций
- •7.8 Пример
- •7.9 Использование шаблонов с двумя типами параметров
- •7.10 Шаблоны классов
Err error;
switch (error){
case ERR_READ: /* операторы */ break;
case ERR_WRITE: /* операторы */ break;
case ERR_CONVERT: /* операторы */ break;
}
Константам ERR_READ, ERR_WRITE, ERR_CONVERT присваиваются значения 0, 1 и 2 соответственно.
Другой пример:
enum {two = 2, three, four, ten = 10, eleven, fifty = ten + 40};
Константам three и four присваиваются значения 3 и 4, константе eleven — 11.
Имена перечисляемых констант должны быть уникальными, а значения могут совпадать. Преимущество применения перечисления перед описанием именованных констант и директивой #define состоит в том, что связанные константы нагляднее; кроме того, компилятор при инициализации констант может выполнять проверку типов. При выполнении арифметических операций перечисления преобразуются в целые. Поскольку перечисления являются типами, определяемыми пользователем, для них можно вводить собственные операции.
Переименование типов
А.11 Переименование типов
Переименование типов позволяет задавать новые названия с существующим типом данных. Используются для того чтобы сделать программу более ясной. Формат записи:
typedef тип новое_имя [ размерность ];
В данном случае квадратные скобки являются элементом синтаксиса. Размерность может отсутствовать. Примеры:
typedef unsigned int UINT;
typedef char Msg[100];
typedef struct{
char f1o[30];
int date, code;
double salary;} Worker;
Введенное таким образом имя можно использовать таким же образом, как и имена стандартных типов:
UINT i, j ; // две переменных типа unsigned int
Msg str[10]; // массив из 10 строк по 100 символов
Worker staff[100]; // массив из 100 структур
Кроме задания типам с длинными описаниями более коротких
псевдопимов, typedef используется для облегчения переносимости программ.
Например, в старых компиляторах для обозначения переменных с плавающей точкой использовался оператор real. Чтобы не переписывать программы под новые компиляторы, можно переименовать real во float.
Пример:
typedef float real;
Открытие файла
12. Библиотека ввода/вывода. Работа с файлами
12.1 Файл и поток
Файл – это поименованная область хранения информации на физическом устройстве (дисковод, принтер, магнитная лента). В С операции ввода/вывода и работы с файлами организованы посредством библиотечных функций. Существует несколько стандартов и соответственно несколько библиотек ввода/вывода.
·ANSI – буферизованный ввод/вывод,
·UNIX – неформатированный ввод/вывод,
·Cи++ – объектно-ориентированный ввод/вывод.
Система ввода-вывода не зависит от типа устройств ввода/вывода. Есть абстрактный уровень между программистом и физическим устройством, называемый потоком. Файл – это средство хранения информации на физическом устройстве.
С связывает физическое устройство с логическим устройством (потоком) посредством функций. Одна функция служит для работы с несколькими физическими устройствами.
Различают два вида потоков.
1)текстовый поток – это последовательность символов, в которой нет однозначного соответствия между символами в потоке и на экране;
2)двоичный поток – это последовательность байтов, где имеет место однозначное соответствие тому, что находится на внешнем устройстве и в памяти.
12.2 Открытие файла
Поток связывается с файлом при помощи операции открытия файла.
Файлы на диске, на принтере, на мониторе, имеют различную структуру. Все потоки одинаковы. Операция открытия файла связывает поток с определённым файлом. Операция закрытия разрывает эту связь. Если поток открыт для вывода, при выполнении операции закрытия, соответствующий буфер записывается на внешнее устройство. При нормальном окончании программы все файлы автоматически закрываются, буферы освобождаются.
Каждый поток, связанный с файлом, имеет управляющую структуру типа FILE, определённую в stdio.h. В stdio.h определены основные характеристики файла (имя, дата создания, статус и т. д.). Для связывания файла с потоком необходимо создать указатель на структуру типа FILE. FILE * fptr;
Открытие файла осуществляется при помощи функции fopen.
Функция открывает поток, связывает файл на диске с потоком и возвращает указатель, ассоциированный с файлом.
FILE * fopen (char * filename, char * mode);
↑ |
↑ |
имя файла: |
мода |
Второй параметр mode задаёт требуемый тип доступа к файлу.
Mode
"r"
"w"
"a"
"r+"
"w+"
"a+"
Действие Открытие для чтения. Если файл не существует или не может быть найден, функция fopen возвращает признак ошибки.
Открытие для записи. Если файл существует, его содержимое уничтожается. Если файл не существует, он создаётся.
Открытие для добавления. Если файл не существует, он создаётся. Открытие для чтения и записи. Файл должен существовать.
Открытие пустого файла для чтения и записи. Если файл существует, его содержимое уничтожается.
Открытие для чтения и добавления. Если файл не существует, он создаётся.
Кроме того, к параметру mode могут быть добавлены символы t и b для задания текстового и двоичного режимов соответственно. По умолчанию используется текстовый режим.
Моды могут сочетаться, например wr – чтение/запись.
В случае ошибки функция fopen возвращает значение NULL.
12.3 Функция exit()
Пример:
#include <stdio.h>
main()
{
FILE * fp;
if ((fp=fopen(“test.txt”, “w”)) = =NULL)
{ puts (“ Не могу открыть файл \n”);
exit (1);
}
else { . . .}
}
Поиск файла осуществляется в текущем каталоге. Для гарантированного нахождения нужного файла необходимо указывать полный путь, например “H:\\BC\\test.txt”.
Функция exit определена в библиотеке stdlib.h. Функция прекращает выполнение программы и возвращает управление ОС, передавая соответствующую константу, которая может служить для диагностики окончания программы. Перед окончанием