4 Задача 4
4.1 Условие задачи
Создать несколько объектов (например, а и b) разработанного класса. Класс – вектор (одномерный массив). Реализовать для объектов данного класса перегрузку операции += (b+=a). Содержимое объектов (a, b, их векторов), до и после выполнения операции, вывести на экран.
4.2 Блок-схема алгоритма функции operator +=
Функция operator+= добавляет к одному вектору второй
4.3 Текст программы
#include <iostream>
using namespace std;
#define MAX_VECTOR_SIZE 1000
class MyVector {
int *_data; // указатель на начало данных вектора
unsigned int _max_size; // максимальный количество элементов вектора
unsigned int _end; // индекс на конец данных вектора
// выделение памяти под данные вектора
void init(unsigned int size) {
_max_size = size;
_data = new int[_max_size];
_end = 0;
}
public:
// конструктор по умолчанию, выделяет место под вектор на MAX_VECTOR_SIZE элементов
MyVector() {
init(MAX_VECTOR_SIZE);
}
// конструктор с параметрами, выделяет место под вектор на size элементов
MyVector(unsigned int size) {
init(size);
}
// конструктор копирования
MyVector(MyVector const & copy) {
delete _data;
init(copy.max_size());
int i;
for (i = 0; i < copy.size(); i++) {
push_to_end(copy.get(i));
}
};
// деструктор, высвобождает выделенную память
~MyVector() {
delete _data;
};
// возвращает элемент с индексом index из вектора
int get(unsigned int index) const {
if (index < _end)
return _data[index];
else {
cout << "oshibka, previshen index massiva" << endl;
return 0;
}
}
// возвращает количество элементов векторе
int size() const {
return _end;
}
// возвращает максимально возможное количество элементов
int max_size() const {
return _max_size;
}
// добавляет элемент в конец вектора
void push_to_end(int element) {
if (_end < _max_size) {
_data[_end] = element;
_end++;
}
}
// удаляет элемент с индексом из вектора
void remove(int index) {
if (index < _end) {
memmove(_data + index, _data + index + 1, (_end - index - 1) * sizeof (int));
_end--;
} else
cout << "oshibka, previshen index massiva" << endl;
}
// выводит на экран содержимое вектора
void show() const {
int index;
cout << "[ ";
for (index = 0; index < _end; index++) {
cout << _data[index];
if ((index + 1) != _end) {
cout << ", ";
}
}
cout << " ]" << endl;
}
// добавляет к одному вектору второй
void operator+=(const MyVector& vector2) {
int i;
for (i = 0; i < vector2.size(); i++) {
push_to_end(vector2.get(i));
}
}
};
int main() {
MyVector v1;
MyVector v2;
// заполняем элементами исходные вектора
v1.push_to_end(10);
v1.push_to_end(3);
v1.push_to_end(6);
v1.push_to_end(45);
v1.push_to_end(67);
v1.push_to_end(23);
v1.push_to_end(22);
v1.push_to_end(21);
v1.push_to_end(10);
v2.push_to_end(11);
v2.push_to_end(32);
v2.push_to_end(75);
v2.push_to_end(41);
v2.push_to_end(62);
v2.push_to_end(13);
v2.push_to_end(12);
v2.push_to_end(200);
v2.push_to_end(11);
v2.push_to_end(12);
cout << "ZADACHA 4" << endl;
cout << "V1 ";
v1.show();
cout << "V2 ";
v2.show();
v1 += v2;
cout << "V1 += V2 ";
v1.show();
return 0;
}
4.4 Скриншоты с результатами работы программы
Скриншот на котором изображены исходные объекты, а также объекты после перегрузки операции +=:
Если мы превысим индекс массива, то получим такой результат: