Лабораторная работа №5
ОПИСАНИЕ И ИСПОЛЬЗОВАНИЕ НАСЛЕДОВАНИЯ.
Цель работы: Изучить принципы описания, возможности и механизм наследования классов.
Требования к выполнению работы:
Для приведенных ниже заданий составить программы на языке С++, в которых производится формирование, обработка и вывод результатов преобразований матриц или массивов. В программе должно быть предусмотрено:
Массивы должны быть объявлены как классы;
Один из массивов объявляется как базовый класс, содержащий данные и функции, позволяющие произвести решение по отношению этого массива;
Один или более массивов согласно заданию должны быть представлены как производные классы, наследующие те данные и функции, которые совпадают с данными и функциями базового класса и имеющие дополнительные данные или функции, которые необходимы для обработки второго или третьего массивов.
5.1 Теоретические положения
При использовании наследования базовый класс и производный объявляются следующим образом:
Class Nameclass_1
{
переменные_1 – члены ;
функции_1 – члены ;
};
Class Nameclass_2 : Nameclass_1
{
переменные_2 – члены ;
функции_2 – члены ;
замещенные функции_1 – члены ;
};
Для получения доступа к данным или функциям-членам базового класса используют спецификаторы доступа:
Class Nameclass : private Nameclass_1
Class Nameclass_2 : public Nameclass_1
Class Nameclass_2 : protected Nameclass_1
Конструкторы не наследуются и объвляются :
Class Nameclass_2::Class Nameclass_2() : Class Nameclass_1
Пример: Задан исходный массив, для которого требуется найти сумму всех элементов и значение максимального элемента. Требуется сформировать массив, распечатать значения элементов массива, распечатать значения суммы и максимального элемента.
Второй массив является дочерним. Для него надо выполнить следующие действия: сформировать, распечатать, умножить каждый элемент на значение максимального элемента.
//Базовый класс
class Array
{
public:
Array ();
~Array ();
void Printed (void);
void Find_Summa (void);
void Find_Max(void);
void Printed_Summa (void);
void Printed_Max(void);
protected:
float *x; //указатель на массив
int n; //размер массива
float max,s; //максимальное значение и сумма
};
//==============================
Array::Array () //Конструктор без параметров
{ cout <<"ВВедите длину массива \n";
cin >> n;
x = new float [n];
for (int i = 0; i < n; i++)
x[i] = random (21)-10;
cout <<"работал конструктор 1"<<endl;
}
//==============================
Array::~Array ()//Деструктор
{
cout<<"работал деструктор 1\n";
delete [] x;
}
//==============================
void Array::Printed (void)
{
for (int i = 0; i < n; i++)
cout <<x[i]<<" ";
cout <<endl;
}
//==============================
void Array::Find_Max(void)
{ max=-1000;
for (int i=0; i<n; i++)
{
if (x[i]>max)
{
max=x[i];
}
}
}
//==============================
void Array::Find_Summa(void)
{
s=0;
for (int i=0; i<n; i++)
s=s+x[i];
}
//==============================
void Array::Printed_Max (void)
{
cout << "max=" << max <<endl;
}
//==============================
void Array::Printed_Summa (void)
{
cout <<"summa="<<s<<endl;
}
//==============================