Лабораторная работа №2.

«Реализация простейшего класса»

ЦЕЛЬ РАБОТЫ

Целью данной лабораторной работы является реализация простейшего абстрактного класса на языке С++.

ЗАДАНИЕ

Разработать класс ArrayOfInt – массив целых чисел. Размерность массива задавать в конструкторе. Реализовать метод доступа к элементам массива. Реализовать метод Sum – вычисление суммы чисел в массиве. Метод сортировки массива по возрастанию и по убыванию, метод сравнения двух массивов (==, !=). Метод конкатенации (слияния) двух массивов.

РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ

ИСХОДНЫЙ КОД ПРОГРАММЫ

Файл ArrayOfInt. h

// файл ArrayOfInt. h

// декларация класса ArrayOfInt – массив целых чисел

// Размерность массива задана в конструкторе.

// Реализован метод доступа к элементам массива.

// Реализован метод sum – вычисление суммы чисел в массиве.

// Метод сортировки массива по возрастанию и по убыванию, метод сравнения двух

// массивов (==, !=). Метод конкатенации (слияния) двух массивов.

// Дефиниция – файл ArrayOfInt. cpp

#ifndef ARRAY_OF_INT

#define ARRAY_OF_INT

class ArrayOfInt

{

public:

ArrayOfInt(int size); // конструктор

~ArrayOfInt(); // деструктор

int getSize(); // возвращает размер массива

int get(int index); // метод доступа к элементам массива

void set(int index, int value); // метод установки элементов массива

int sum(); //вычисление суммы чисел в массиве

// Метод сортировки массива по возрастанию и по убыванию:

void sort(bool isIncrease);

// методы сравнения двух массивов (==, !=):

НЕ нашли? Не то? Что вы ищете?

bool operator ==(ArrayOfInt& array);

bool operator !=(ArrayOfInt& array);

// Метод конкатенации (слияния) двух массивов:

ArrayOfInt& concatenation(ArrayOfInt& array);

private:

int *p_; // указатель на массив

int size_; // размер массива

};

#endif // ARRAY_OF_INT

Файл ArrayOfInt. cpp

#include "ArrayOfInt. h"

ArrayOfInt::ArrayOfInt(int size) : size_(size)

{

p_ = new int[size_];

for (int i = 0; i < size_; i++)

p_[i] = 0;

}

ArrayOfInt::~ArrayOfInt()

{

delete []p_;

}

int ArrayOfInt::getSize()

{

return size_;

}

int ArrayOfInt::get(int index)

{

return p_[index];

}

void ArrayOfInt::set(int index, int value)

{

p_[index] = value;

}

int ArrayOfInt::sum()

{

int s = 0;

for (int i = 0; i < size_; i++)

s += p_[i];

return s;

}

void ArrayOfInt::sort(bool isIncrease)

{

int buf;

//сортировка массива методом пузырька:

for(int i = 0; i < size_; i++) {

for(int j = 0; j < size_ - 1; j++) {

if (isIncrease && p_[j] > p_[j + 1]

|| !isIncrease && p_[j] < p_[j + 1]) {

buf = p_[j];

p_[j] = p_[j + 1];

p_[j + 1] = buf;

}

}

}

}

bool ArrayOfInt::operator ==(ArrayOfInt& array)

{

if (size_ != array.getSize())

return false;

for(int i = 0; i < size_; i++) {

if (p_[i] != array.get(i))

return false;

}

return true;

}

bool ArrayOfInt::operator !=(ArrayOfInt& array)

{

return !(*this == array);

}

ArrayOfInt& ArrayOfInt::concatenation(ArrayOfInt& array)

{

ArrayOfInt tempArray(size_);

int i;

for(i = 0; i < size_; i++) {

tempArray.set(i, p_[i]);

}

delete []p_;

int newSize = size_ + array.getSize();

p_ = new int[newSize];

for(i = 0; i < size_; i++) {

p_[i] = tempArray.get(i);

}

for(int j = 0; j < array.getSize(); j++) {

p_[i++] = array.get(j);

}

size_ = newSize;

return *this;

}

Файл main. cpp

#include "ArrayOfInt. h"

#include <iostream>

#include <conio. h>

#include <time. h>

using namespace std;

void showArray(ArrayOfInt& array) // вывод массива на экран

{

for (int i = 0; i < array.getSize(); i++)

cout << array.get(i) << " ";

}

void main()

{

ArrayOfInt arr(10);

// установка начальной точки для генерации псевдослучайных целых чисел:

srand ((unsigned int)time(NULL));

// заполнение массива:

for (int i = 0; i < arr.getSize(); i++)

arr.set(i, rand() % 10);

// вывод массива на экран:

cout << "Array 1:" << endl;

showArray(arr);

// вычисление и вывод на экран суммы чисел в массиве:

cout << endl << "Array 1 sum = " << arr.sum() << endl;

// сортировки массива по убыванию:

arr.sort(false);

cout << "Decrease Sorted array 1:" << endl;

showArray(arr);

ArrayOfInt arr2(10);

// заполнение массива:

for (int i = 0; i < arr2.getSize(); i++)

arr2.set(i, rand() % 10);

// вывод массива на экран:

cout << endl << "Array 2:" << endl;

showArray(arr2);

cout << endl;

//сравнение массивов:

if( arr == arr2)

cout << "Array 1 == Array 2";

else

cout << "Array 1 != Array 2";

// сортировки массива по возрастанию:

arr.sort (true);

cout << endl << "Increase Sorted array 1:" << endl;

// вывод массива на экран:

showArray(arr);

cout << endl;

//сравнение массивов:

if( arr == arr2)

cout << "Array 1 == Array 2";

else

cout << "Array 1 != Array 2";

// заполнение массива:

for (int i = 0; i < arr2.getSize(); i++)

arr2.set(i, rand() % 100);

// вывод массива на экран:

cout << endl << "Array 2:" << endl;

showArray(arr2);

//конкатенация (слияния) двух массивов:

arr.concatenation(arr2);

cout << endl << "Array 1 (concatenated with array 2):" << endl;

// вывод массива на экран:

showArray(arr);

_getch();

}