Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OP.doc
Скачиваний:
37
Добавлен:
15.03.2015
Размер:
108.54 Кб
Скачать

28 Билет. Понятие наследования. Объявление классов при наследовании

Функция потомка перекрывает одноимённую функцию своего предка.

Формат объявления функции потомка:

class имя_потомка:

режим_доступа имя_предка

{

новые_элементы;

};

Для того, что бы элементы данных класса предка были доступны функциям класса потомка, этим элементам должен быть поставлен в соответствии режим доступа — protected.

Class имя_потомка::режим_доступа имя_потомка

{…};

29 Билет. Конструкторы и деструкторы. Их имена и объявления

Конструктор создан для инициализации компонентных данных и выделение динамической памяти под данные.

Диструктор освобождает выделенную память конструктором при удалении объекта.

Int, double,float...

Выделение и освобождение памяти происходит системой автоматически.

Конструктор и диструктор объявляются, как члены функции класса. Имя конструктора совпадает с именем класса, а имя диструктора начинается с ~имя_класса

Пример:

class str_oper

{char *string;

int string_len;

public:

str_oper(char *)//конструктор

{string=new char[string_len];}

~str_oper() //диструктор

{delete string;}

}

В основной программе обращения к конс. Или дистр. Нет. Их выполнение происходит автоматически.

30 Билет. Полиморфизм и перегрузка

Возможность использования функции(или операции) с одним и тем же именем применительно к разным наборам аргументов и операторов. Реализация выполнена через перегрузку.

Перегрузка — это расширения действия стандартных функций. Внутри класса допускается существование нескольких функций с одинаковыми именами, но различных типов результатов и наборами формальных параметров.

Компилятор автоматически выбирает подходящий вариант.

Пример:

int absolute::modul(int x)

{ return(abs(x)); }

double absolute::modul(double x)

{ return(fabs(x)); }

Перегрузка операций

Полиморфизм реализуется не только через механизм перегрузки, но и через перегрузку операции. Включается специальная функция, которая определяет действия, выполняемые этой операцией. Формат определения такой функции:

тип_возвращаемого_значения

оператор знак_операции(спецификации_параметров_операции)

{ тело_функции_операции; }

Пример:

#include<iostream.h>

#include<conio.h>

class vector

{

int x,y,z;

public:

vector operator+(vector t);

vector operator=(vector t);

void int (int mx, int my, int mz);

void show(void);

};

//Перегрузка операций+

vector vector::operator+(vector t)

{

vector temp;

temp.x=x+t.x;

temp.y=y+t.y;

temp.z=z+t.z;

return temp;

}

//Перегрузка операции=

vector vector::operator=(vector t)

{

x=t.x;

y=t.y;

z=t.z;

return *this;

}

void vector::init(int mx, int my, int mz)

{ x=mx; y=my; z=mz; }

void vector::Show(void)

{ cout<<x<<”, ”<<y<<”, ”<<z<<”\n”; }

void main()

{vector a,b,c;

clrscr():

a.init(1,2,3);

b.init(10,10,10);

a.show();

b.show();

c=a+b;

c.show();

c=a+b+c;

c.show();

c=b=a;

c.show();

b.show();

getch();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]