- •2.Операторы new, delete.
- •4. Перегрузка функций.
- •5. Ссылки. Назначение и особенности использования.
- •10. Классы и объекты. Члены классов. Атрибуты доступа.
- •11. Описание классов. Видимость и доступ к членам классов.
- •12. Функции-члены классов. Описание, вызов.
- •13. Инициализация объектов классов. Назначение, типы конструкторов.
- •14. Инициализация объектов классов. Описание конструкторов.
- •15. Особенности описания и использования конструкторов копирования.
- •16. Деструкторы. Назначение, описание, использование.
- •17. Пример описания конструктора копирования для класса со структурными членами-данными (массива).
- •24. Пример использования функции-друга.
- •25. Перегрузка операторов. Назначение, правила, способы.
- •26. Перегрузка операторов с использованием операторных-функций. Указатель this.
- •27. Перегрузка операторов с использованием дружественных функций.
- •28. Поразрядное копирование. Особенности перегрузки оператора присваивания.
- •29. Перегрузка операторов отношений. Примеры.
- •30. Перегрузка логических операторов. Примеры.
- •31. Перегрузка арифметических операторов. Примеры.
- •33. Перегрузка оператора ”[ ]” для класса со структурными членами-данными (массива).
- •37. Наследование. Конструкторы и деструкторы.
- •38. Наследование. Видимость и доступ к членам базовых и производных классов.
- •39. Статический (перегрузка операторов, функций, функций-членов, конструкторов) полиморфизм.
- •40. Пример описания класса на базе одиночного наследования.
- •41. Функции-шаблоны. Назначение, описание, использование.
- •42. Пример описания и вызова функции-шаблон для суммирования элементов массива.
- •45. Характеристика пространства имен.
- •46. Описание и использование пространства имен (на примере).
- •47. Понятие исключительная ситуация и способы обработки исключений.
- •50. 51.Синтаксис и использование команды try, catch. Варианты использования catch. Генерация исключений командой throw.
- •52. Варианты генерации и обработки исключений.
- •Istream iostrim ostream
- •Ifstream fstream ofstream
- •64. Пример создания и заполнения файла.
- •65. Пример открытия и чтения содержимого файла.
- •66. Пример заполнения файла записями (значение-значение, размещенными в полях 20 и 30 позиций, с прижатием соответственно влево и вправо).
28. Поразрядное копирование. Особенности перегрузки оператора присваивания.
Для оператора = компилятор поддерживает скрытую функцию по умолчанию, которая копирует данные объекта, стоящего справа от знака =, в объект, стоящий слева. Такое исполнение оператора неверно для классов. Где используется динамическое выделение память, поэтому для них оператор = всегда следует перегружать. В определении операторной функции-члена необходимо учитывать, что присвоение модифицирует существующее значение операнда, который стоит слева от знака оператора.
class COffice
{
private:
char m_namedok[30]; //название документа
int m_date[3]; //дата подписания
int m_kode; //код документа
public: …..
};
COffice& COffice :: operator=(COffice &x1)
{
strcpy( m_namedok, x1.m_namedok);
for (int i=0; i<3; i++)
{
m_date[i]=x1.m_date[i];
}
return *this;}
29. Перегрузка операторов отношений. Примеры.
Результат переменной целого либо логического типа, не совпадает с типом объектов. Значение операндов не изменяется (поэтому их можно передавать и по значению, и по ссылке)
int operator# (класс оп_2)
{
….
return знач_int;
}
Через функцию друг:
int friend operator# (класс оп_1, класс оп_2)
{…. return знач_int; }
#include <iostream.h>
#include <string.h>
class String {
private: char *str;
public: String()
{ str= new char;
str='\0';}
String (char *s)
{ int kol=strlen(s);
str=new char (kol);
if (!str)
cout<<"ERROR";
strcpy(str, s);
}
String (String &obj)
{ int kol=strlen(obj.str);
str=new char (kol);
if (!str)
cout<<"ERROR";
strcpy(str, obj.str);
}
bool operator<(String &obj)
{ if (strlen(str)<strlen(obj.str))
return 1;
return 0;}
};
30. Перегрузка логических операторов. Примеры.
Результат переменной целого либо логического типа, не совпадает с типом объектов. Значение операндов не изменяется (поэтому их можно передавать и по значению, и по ссылке)
int operator# (класс оп_2)
{
….
return знач_int;
}
Через функцию друг:
int friend operator# (класс оп_1, класс оп_2)
{…. return знач_int; }
#include <iostream.h>
#include <string.h>
class String {
private: char *str;
public: String()
{ str= new char;
str='\0';
}
String (char *s)
{ int kol=strlen(s);
str=new char (kol);
if (!str)
cout<<"ERROR";
strcpy(str, s);
}
String (String &obj)
{ int kol=strlen(obj.str);
str=new char (kol);
if (!str)
cout<<"ERROR";
strcpy(str, obj.str);
}
bool operator!()
{ if (strlen(str)!=0)
return 1;
return 0;
}};
31. Перегрузка арифметических операторов. Примеры.
В общем случае результат должен оставаться объектом того же класса, поэтому как правило результат – временный объект этого же класса, который и возвращается после выполнения оператора. Исходные значения меняться не должны. Возвращается результат.
class COffice
{
private:
char m_namedok[30]; //название документа
int m_date[3]; //дата подписания
int m_kode; //код документа
public: …..
};
COffice operator+ (COffice obj, char* str)
{
COffice Temp;
strcpy(Temp.m_namedok, obj.m_namedok);
strcat(Temp.m_namedok, str);
if(strlen( (obj.m_namedok)+strlen(str)) >= 30 )
Temp.m_namedok[29]='\0';
return Temp;
}