Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольная работа ооп.doc
Скачиваний:
49
Добавлен:
01.04.2014
Размер:
1.42 Mб
Скачать

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 Скриншоты с результатами работы программы

Скриншот на котором изображены исходные объекты, а также объекты после перегрузки операции +=:

Если мы превысим индекс массива, то получим такой результат: