
- •Объявление и определение класса.
- •Конструкторы и деструкторы ( типы конструкторов и деструкторов)
- •Дружественные функции.
- •Пеpегpузка опеpаций ( синтаксис operator)
- •Статические компоненты класса.
- •Пространства имен.
- •Иерархия классов ( последовательность работы конструкторов и деструкторов )
- •Доступ к наследуемым компонентам
- •Виртуальные функции (когда применяются, форма вызова)
- •Шаблоны ( пример template)
- •Ввод-вывод в файл. Сохранение объектов в файле.
- •Обработка исключений (блоки try, throw, catch)
- •Использование классов при организации исключений. Иерархия исключений
- •Паттерны и их классификация
- •Абстрактная фабрика.
- •Наблюдатель.
- •Классификация типов данных.
- •Массивы и строки. Оператор foreach
- •Классы, создание объектов.
- •Методы класса и их параметры.
- •Свойства класса.
- •Наследование и виртуальные функции. Механизмы наследования
- •Классы – интерфейсы.
- •Производные классы
- •Методы - члены класса
- •Виртуальные методы
- •Делегаты.
- •Создаем собственный делегат
Ввод-вывод в файл. Сохранение объектов в файле.
Для работы с дисковыми файлами в языке С++ предусмотрен класс fstream и производные от него классы ifstream и ofstream. Для записи или считывания данных надо объявить объект соответствующего класса и связать его с файлом.
Например,
ifstream fin ( имяфайла, режимы_чтения);
ofstream fout(( имяфайла, режимы_записи);
В классе fstream для файловых объектов определены операции вставки и извлечения, так что для стандартных типов b и строкового типа string можно применять привычную запись типа fin>> …, fout<<…. Для пользовательских типов операции надо переопределять.
Двухаргументные методы read и write позволяют считывать/записывать в файл блоки двоичных данных. Количество байт в блоке является аргументом этих методов. Считываются и записываются символьные массивы типа char*; числовые типы следует преобразовывать, например, операцией reinterpret_cast<char*>.
class MyRecord;
typedef vector <MyRecord> Base;
vector<MyRecord>::iterator index ; //Определение итератора index
class MyRecord{
string Name;
int age;
public:
//Метод задания значений элементов
void InputRecord()
/* Здесь следует включить обработку ошибок ввода данных, например, в name не должны вводиться цифры, возраст не может превышать 100 и т.п.*/
{
try
{char name[30];
gets(name);
Name=name;
cin>>age;}
}
void ShowRecord()const { cout<<Name<<" "<<age<<endl;}
int GetAge()const {return age;}
// Перегрузка вставки и извлечения для файловых объектов и класса MyRecord
friend ifstream& operator >> (ifstream& s, MyRecord& obj)
{ s>>obj.Name>>obj.age; return s;}
friend ofstream& operator << (ofstream& s, MyRecord& obj)
{ s<<obj.Name<<endl<<obj.age<<endl; return s;}
Обработка исключений (блоки try, throw, catch)
Под исключением понимается некоторая ситуация, возникающая при выполнении программы, вследствие появления которой нормальное продолжение программы невозможно. Дальнейшее выполнение программы определяется программистом на этапе проектирования программы и носит название обработки исключения. К исключительным ситуациям относятся ошибки выполнения. Прерывание программы пользователем или от аппаратуры (например, нажатие клавиш Ctrl-Break, сигнал таймера) как исключения не рассматриваются.
В С++ введен специальный механизм обработки исключений. Он организуется при помощи трех ключевых слов: try, catch и trow.
В блок try помещается или вся программа, или фрагмент ее, в котором может возникнуть ошибка. При возникновении ошибки возбуждается исключение (throw), которое перехватывается и обрабатывается в блоке catch.
Схема размещения такова:
try { …
throw выражение1;
….
throw выражение2;
…..
}
catch (тип арг1)
{ ….}
catch (тип арг2)
{ ….}
Выражение может быть простой переменной, ссылкой, указателем или вызовом конструктора класса. Аргументами catch должны быть соответственно типы простых переменных, ссылок, указателей или имя класса.
Механизм обработки исключений, вообще говоря, обеспечивает корректное завершение программы: если при возникновении исключительной ситуации в функции не найден соответствующий обработчик, то с помощью деструктора уничтожаются объекты; если исключение возникло в конструкторе в момент работы оператора new, то разрушаются только что построенные элементы; при сбоях при работе с файлами последние закрываются; сворачиваются все открытые стеки.
Исключения в программе могут быть организованы как иерархия классов исключений. Например, класс арифметических ошибок, класс ошибок ввода данных и др. могут быть производными классами некоторого базового класса.
do try
{ c=0;
cout<<"<1> Input from the keyboard "<<endl;
cout<<"<2> Input from a file "<<endl;
cin>>c;
if ((c!=1)&&(c!=2)) throw 1;
}
catch(...)
{
cout<<"Incorrect. Try again."<<endl;
}
while((c!=1)&&(c!=2));