Материал: ЛР 8 Информатика 2 сем 2020

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

~Massiv()

{

delete[] data; // Освобождаем память при удалении объекта

}

};

9.3Примеры решения задач

Для примера возьмѐм задачу из предыдущего раздела.

Создать тип данных для хранения целочисленного массива произвольной длины. Написать функции для заполнения массива случайными значениями и для вывода на экран всех значений массива. Перегрузить оператор «+» для поэлементного сложения двух целочисленных массивов.

Блок-схемы алгоритмов работы методов класса (здесь не приведены) такие же, как и у функций работы со структурами в примере из предыдущего раздела. Разница только в реализации программным кодом.

//Для использования объектов cin и cout для ввода-вывода

#include <iostream>

//Для получения значения текущего времени для задания начального значения для генератора случайных чисел

#include <time.h>

//Тип данных «целочисленный массив»

class Massiv

{

unsigned int quantity; // Количество данных int *data; // Указатель на данные

public:

// Конструтор

Massiv(unsigned int size)

{

quantity = size; // Запоминаем размер

data = new int[quantity]; // Выделяем память

148

// Заполняем созданный массив нулями for(unsigned int i = 0; i < quantity; i++)

{

data[i] = 0;

}

}

// Конструтор копирования

Massiv(Massiv& m)

{

quantity = m.quantity; data = new int[quantity];

for(unsigned int i = 0; i < quantity; i++)

{

data[i] = m.data[i];

}

}

//Деструктор

~Massiv()

{

delete[] data;

}

//Заполнение массива случайными числами void Zapoln()

{

for(unsigned int i = 0; i < quantity; i++)

{

data[i] = rand() - RAND_MAX / 2;

}

}

//Для вывода элементов массива на экран

void Vivod()

{

for(unsigned int i = 0; i < quantity; i++)

{

std::cout<<data[i]<<"\t";

}

std::cout<<"\n\n";

}

149

// Перегрузка оператора присваивания

Massiv& operator=(const Massiv& m)

{

delete[] data;

quantity = m.quantity; data = new int[quantity];

for(unsigned int i = 0; i < quantity; i++)

{

data[i] = m.data[i];

}

return *this;

}

//Перегрузка оператора "+" для сложения массивов

Massiv operator+(const Massiv& B)

{

//Создаём массив-результат, учитываем что складываемые массивы могут иметь разную длину

Massiv C(quantity > B.quantity ? quantity : B.quantity);

//Заносим в массив-результат суммы элементов массивоваргументов

const unsigned int temp = quantity < B.quantity ? quantity : B.quantity;

for(unsigned int i = 0; i < temp; i++)

{

C.data[i] = data[i] + B.data[i];

}

//Если один из массивов длинее другого, докопируем оставшиеся элементы

const int *temppointer = quantity > B.quantity ? data : B.data;

for(unsigned int i = temp; i < C.quantity; i++)

{

C.data[i] = temppointer[i];

}

return C;

}

};

150

// Для проверки работоспособности созданного класса напишем: void main()

{

srand(time(NULL));

// Создаём два массива

Massiv mass1(5); mass1.Zapoln(); mass1.Vivod();

Massiv mass2(3); mass2.Zapoln(); mass2.Vivod();

//Суммируем их в третий

Massiv mass3 = mass1 + mass2;

//Выводим результат на экран mass3.Vivod();

system("pause");

}

Тесты

Проведѐм несколько тестов созданного класса.

Размер: 5

-1886

 

2788

5564

971

-11380

 

Размер: 3

1388

 

-110

-14277

 

 

 

Сумма:

-498

 

2678

-8713

971

-11380

 

Размер: 4

-1716

 

4649

-15771 7079

 

 

Размер: 4

690

8970 -2102 -2655

 

 

Сумма:

-1026

 

13619

-17873 4424

 

 

Размер: 3

-1537

 

5988

-16282

 

 

 

Размер: 6

-12926

10935

-4436

5243

184

-13580

Сумма:

-14463

16923

-20718 5243 184

-13580

Массивы заполняются случайными значениями. Суммы массивов посчитаны правильно. Программа работает верно.

151

9.4Задания:

При выполнении заданий данной лабораторной работы не использовать конструкции для ввода и вывода внутри создаваемых по заданию функций и не использовать глобальных переменных, если это не указано явно.

Допускается использовать внутри создаваемых функций другие пользовательские и библиотечные функции.

При выполнении заданий данной лабораторной работы допускается составлять блок-схемы только для создаваемых функций.

Задача 8.1.1. Создать класс для хранения строки символов. Реализовать конструктор для создания строки с заданным содержимым. Реализовать методы для замены содержимого строки и для получения указателя на содержимое строки. Перегрузить как методы операторы «+» и «+=» для соединия двух строк в одну.

Задача 8.1.2. Создать класс для хранения строки символов. Реализовать конструктор для создания строки с заданным содержимым. Реализовать методы для замены содержимого строки и для получения указателя на содержимое строки. Перегрузить как методы операторы «-» и «-=» для удаления из строки всех вхождений заданного символа.

Задача 8.1.3. Создать класс для хранения строки символов. Реализовать конструктор для создания строки с заданным содержимым. Реализовать методы для замены содержимого строки и для получения указателя на содержимое строки. Перегрузить как методы операторы «>>» и «<<» для циклического сдвига символов в строке на заданное число позиций.

Задача 8.1.4. Создать класс для хранения строки символов. Реализовать конструктор для создания строки с заданным содержимым. Реализовать методы для добавления символов к содержимому строки и для получения указателя на содержимое строки. Перегрузить как методы операторы «==» и «!=» для сравнения двух строк.

Задача 8.1.5. Создать класс для хранения строки символов. Реализовать конструктор для создания строки с заданным содержимым. Реализовать методы для добавления символов к содержимому строки и для получения указателя на содержимое строки. Перегрузить как метод оператор унарный «-» для изменения порядка символов в строке на обратный.

152

Источник: https://studfile.net/preview/16421898/