- •7)Понятие структурного программирования. Базовые конструкции структурного программирования. Оператор «выражения».
- •8)Операторы ветвления. Условный оператор if. Оператор switch.
- •10)Операторы передачи управления. Оператор goto. Оператор break. Оператор continue. Оператор return.
- •11) Указатели. Инициализация указателей. Операции с указателями. Ссылки.
- •12)Массивы. Динамические массивы. Строки.
- •13)Типы данных, определяемые пользователем. Переименование типов. Перечисление.
- •14)Типы данных, определяемые пользователем. Структуры. Битовые поля. Объединения.
- •15)Функции. Объявление и определение функций.
- •16)Способы обмена данными между функциями. Глобальные переменные. Возвращаемое значение. Параметры функции. Передача массивов в качестве параметров. Параметры со значениями по умолчанию.
- •17)Рекурсивные функции. Функция main().
- •18)Перегрузка функций.
- •19)Шаблоны функции.
- •20)Директивы препроцессора. Директива #include. Директива #define. Директива #undef.
- •21)Директива препроцессора. Директивы условной компиляции.
- •22)Основные свойства объектно-ориентированного программирования. Понятие класса.
- •23)Классы. Описание класса. Описание объекта. Константные методы. Указатель this.
- •24)Конструкторы. Конструктор копирования. Статические элементы класса.
- •25)Деструкторы. Дружественные функции и классы.
- •26)Перегрузка операций. Перегрузка бинарных и унарных операций.
- •27)Перегрузка операций. Перегрузка операции присваивания. Перегрузка операции приведения типа. Перегрузка операции индексирования.
- •28)Наследование. Ключи доступа к элементам базового класса. Простое наследование.
- •29)Виртуальные методы. Механизм позднего связывания.
- •30)Абстрактные классы. Множественное наследование.
- •31)Шаблоны классов. Создание шаблонов. Использование шаблонов класса.
- •35)Форматирование данных при вводе - выводе в поток. Флаги и манипуляторы.
- •38)Модель программирования для os Windows. Механизм обработки сообщений в Windows. Группы сообщений.
27)Перегрузка операций. Перегрузка операции присваивания. Перегрузка операции приведения типа. Перегрузка операции индексирования.
Перегрузка операций присваивания.
Операция присваивания должна возвращать ссылку на объект, для которого она вызвана, и принимать в качестве параметра единственный аргумент - ссылку на присваиваемый объект.
const monstr& operator = (const monstr &M)
{if (&m==this) return *this;
if (name != NULL) delete[] name;
{name=new char[strlen(M.name)+1];
strcpy(name, M.name);}
else name=NULL;
health=M.health; ammo=M.ammo;
return *this;}
monstr A(10), B, C; C=B=A;
Перегрузка операции приведения типа.
Фомат операции:
operator имя_типа();
monstr:: operator int() {return health;}
monstr:: operator char*() {return name;}
...
monstr Vasia;
cout<<(int) Vasia<<(char*) Vasia;
Перегрузка операций индексирования.
class Vect
{private:
int *p;
int size;
public:
Vect(int n)
{size=n;
p=new int[size];}
~Vect() {delete[] p;}
... // Методы заполнения массива
...
int & operator[] (int);};
int & Vect:: operator[] (int i)
{if (i<0||i>=size)
{cout<<"неверный индекс";
return p[0];}
return p[i]}
void main()
{Vect a(10);
...
cout<<a[5]<<"\n";
cout<<a[12]<<"\n";} // Сообщение об ошибке.
28)Наследование. Ключи доступа к элементам базового класса. Простое наследование.
Наследование позволяет строить иерархии, в которых производные классы получают элементы родительских классов и могут дополнять или изменять их свойства
- при описании класса можно перечислять базовые классы
- можно указать, какая видимость требуется для унаследования элементов в порожденном классе с помощью ключей доступа:
1) private – скрытый, частный
2) protected – защищенный
3) public – публичный
ключ доступа |
спецификатор в базовом классе |
доступ в порожденном классе |
private |
private protected public |
нет private private |
protected |
private protected public |
нет protected protected |
public |
private protected public |
нет protected public |
- конструкторы не наследуются, поэтому производный класс должен иметь свой конструктор
- порядок вызова конструктора:
а) если в производном классе отсутствует явный вызов конструктора базового класса, автоматически вызывается конструктор базового класса по умолчанию
б) после вызова конструктора базового класса выполняется конструктор тех элементов класса, которые являются объектами, и потом выполняется конструктор порожденного класса
в) в случае нескольких базовых классов их конструкторы вызываются в порядке объявления
г) если конструктор базового класса требует указания параметра, он должен быть явно вызван в конструкторе произвольного класса в списке инициализации
- не наследуется операция присваивания, поэтому ее также требуется явно определить в производном классе
- деструктор не наследуется, и если он не описан в производном классе, то он формируется по умолчанию и вызывает деструктор базовых классов. Деструктор вызывается в обратном порядке вызову конструктора.
