Задание
На основе абстрактного базового класса, реализовать контейнер динамических объектов, выполнить перегрузки основных операций для металлической сетки, таким образом, чтобы они вели себя подобно встроенных стандартных типов. Основные операции (=, отношение, арифметические операции).
Выбор алгоритма решения задачи
Для решения этой задачи необходимо создать абстрактный базовый класс. И производный от него класс управления данными, не обязательно динамических объектов, так как алгоритм и структура одинакова. Перегруженные операторы, такие как отношение, арифметические и так далее, необходимо указать, а затем описать, что они будут делать.
Описание решения задачи
Для этого выберем абстрактный базовый класс: class Employee. В нем опишем перегрузки операторов, например «+»: friend Employee & operator + (Employee &, Employee &. В походном классе опишем действие перегруженного оператора «+».
friend complex operator+ (complex &i, complex &_i)
{complex R(0,0);
R.re = i.re + _i.re; R.im = i.im + _i.im;
return R;
}
Текст программы
1. Base.h
#ifndef BASE_H
#include <iostream.h>
#include <string.h>
#include <assert.h>
#define BASE_H
class Employee {
public:
Employee (void) {};
friend Employee & operator+ (Employee &, Employee &) ;
friend bool operator== (Employee &,Employee &);
friend Employee & operator- (Employee &, Employee &) ;
friend ostream & operator<< (ostream & o, Employee &) ;
friend istream & operator>> (istream & o, Employee &) ;
};
#endif
2. Cint.h
#include <iostream.h>
#include "base.h"
class complex : public Employee {
int re;
int im;
public:
complex (int r, int j) { re = r; im = j; }
friend ostream &operator<< (ostream & o, complex &i) {
return o << i.re << " " << i.im<<endl;
}
friend istream &operator>> (istream & o, complex &i)
{return o >> i.re >>i.im;}
friend complex operator+ (complex &i, complex &_i)
{complex R(0,0);
R.re = i.re + _i.re; R.im = i.im + _i.im;
return R;
}
friend bool operator== (complex &i,complex &_i)
{ if (i.re == _i.re && i.im == _i.im)
return true;
else return false;
}
friend complex operator- (complex &i, complex &_i)
{ complex R1(0,0);
R1.re = i.re - _i.re; R1.im = i.im - _i.im;
return R1;
}
};
3. Main.cpp
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
#include "BASE.h"
#include "Cint.h"
int main()
{
complex A1(0,0);
complex A2(0,0);
cout << "Vvedite - 2 raza 2 chisla: \n";
cin >> A1;
cin >> A2;
cout <<"Perviy masiv А1= " << A1<<'\n';
cout <<"Vtoroy masiv А2= " << A2<<'\n';
cout << "a1 + a2: " << A1 + A2 << endl;
cout << "a1 - a2: " << A1 - A2 << endl;
A1 = A2;
cout <<"A1 = А2: "<< A1 <<endl;
if (A1 == A2) cout << "A1 == A2 "<<endl;
cout<< A1 << endl;
getch();
return 0;
}
Результат работы программы