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();
}
