Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursach.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
446.29 Кб
Скачать

Int* array_;

Конец

Рисунок 2-класс

  1. Листинг программы

// kursovaya.cpp -- 1 вариант

/* * Задание произвольных целых границ индексов при создании объекта * обращение к отдельному элемнту массива с контролем выхода за его пределы * выполнение операций поэлементного сложения и вычитания массивов * выполнение операций умножения и деления всех элементов массива на скаляр * вывод на экран элемента массива по заданному индексу и всего массива * написать программу, демонстрирующую все разработанные элементы класса */

#include <iostream>

#include <stdexcept>

class ArrayInt

{

public:

class BadIndexException: public std::logic_error // внутренний класс для

// генерирования исключения выхода за пределы массива

{

private:

int bad_index;

public:

explicit BadIndexException(int index,

const std::string& str = "Error: Index of out range.\n"):

logic_error(str), bad_index(index) {}

int bindex (void) const { return bad_index; }

virtual ~BadIndexException (void) throw () {}

};

ArrayInt(void): size_(0), array_(0) {} // конструктор по умолчанию

explicit ArrayInt(std::size_t size): size_(size),

array_(new int [size_]) {} // конструктор с параметрами

ArrayInt(const ArrayInt& arr): size_(arr.size_), // конструтор копирования

array_(new int [size_])

{

for (std::size_t i = 0; i < size_; i++)

array_[i] = arr.array_[i];

}

ArrayInt& operator = (const ArrayInt& arr) // оператор присваивания

{

if (this == &arr)

return *this;

delete [] array_;

size_ = arr.size_;

array_ = new int [size_];

for (std::size_t i = 0; i < size_; i++)

array_[i] = arr.array_[i];

return *this;

}

~ArrayInt() { delete [] array_; } // деструктор

const int& operator [] (std::size_t index) const // неконстантный оператор доступа по индексу

{

if (index < 0 || index >= size_)

throw BadIndexException(index);

return array_[index];

}

int& operator [] (std::size_t index) // неконстантный оператор доступа по индексу

{

return const_cast<int&>(static_cast<const ArrayInt&>(*this)[index]);

}

ArrayInt addInPairs(const ArrayInt& arr) const // поэлементное сложение двух

// объектов ArrayInt

{

if (size_ != arr.size_)

return ArrayInt();

ArrayInt tmp(size_);

for (std::size_t i = 0; i < size_; i++)

tmp.array_[i] = array_[i] + arr.array_[i];

return tmp;

}

ArrayInt subInPairs(const ArrayInt& arr) const // поэлементное вычитание

// двух объектов ArrayInt

{

if (size_ != arr.size_)

return ArrayInt();

ArrayInt tmp(size_);

for (std::size_t i = 0; i < size_; i++)

tmp.array_[i] = array_[i] - arr.array_[i];

return tmp;

}

ArrayInt mull(int digit) const // умножение объекта ArrayInt на число

{

ArrayInt tmp(size_);

for (std::size_t i = 0; i < size_; i++)

tmp.array_[i] = array_[i] * digit;

return tmp;

}

ArrayInt dev(int digit) const // деление объекта ArrayInt на число

{

ArrayInt tmp(size_);

for (std::size_t i = 0; i < size_; i++)

tmp.array_[i] = array_[i] / digit;

return tmp;

}

std::size_t size(void) { return size_; } // возвращает размер массива

private:

std::size_t size_; // размер массива

int* array_; // указатель на int

};

void initArray(ArrayInt& arr); // процедура инициализации массива строк

void lookArray(ArrayInt& arr, const char* delim); // процедура вывода массива

// строк на экран

int main(void)

{

using std::cout;

using std::cin;

using std::endl;

{

ArrayInt one(5), two(5);

// Инициализируем объект one числами введенными с клавиатуры

cout << endl << "Intialization one object"<< endl;

initArray(one);

// Инициализируем объект one числами введенными с клавиатуры

cout << endl << "object one: ";

lookArray(one, " ");

// Инициализируем объект two числами введенными с клавиатуры

cout << endl << endl <<"Intialization array_2 object";

initArray(two);

// Выводим объект two на экран

cout << endl << "object two: ";

lookArray(two, " ");

// Поэлементное сложение объектов one и two

ArrayInt three = one.addInPairs(two);

// Выводим результат поэлементного сложения (объект three) на экран

cout << endl << endl << "Addition one object and two object: ";

lookArray(three, " ");

// Поэлементное вычитание объектов one и two

ArrayInt four = one.subInPairs(two);

// Выводим результат поэлементного вычитания (объект four) на экран

cout << endl << endl << "Subtraction one object and two object: ";

lookArray(four, " ");

// Умножение объекта one на скаляр(в данном случае целое число 10)

ArrayInt five = one.mull(10);

// Выводим результат умножения на экран

cout << endl << endl << "one * 10: ";

lookArray(five, " ");

// Деление объекта one на скаляр(в данном случае целое число 10)

ArrayInt six = one.dev(10);

// Выводим результат деления на экран

cout << endl << endl <<"one / 10: ";

lookArray(six, " ");

}

cout << endl <<"Bye."<< endl;

return 0;

}

void initArray(ArrayInt& arr)

{

for (std::size_t i = 0; i < arr.size(); i++)

{

std::cout << std::endl << "Enter the "<< i + 1 <<" element: ";

std::cin >> arr[i];

}

}

void lookArray(ArrayInt& arr, const char* delim)

{

for (std::size_t i = 0; i < arr.size(); i++)

std::cout << arr[i] << delim;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]