Лабораторная работа «Конструкторы и деструктор. Перегрузка операторов»

 

Ключевые понятия: конструктор, конструктор по умолчанию, конструктор копирования, деструктор, перегрузка оператора, оператор присваивания.

Цель работы: изучить виды конструкторов, принципы использования конструкторов, назначение деструктора, способы перегрузки операторов.

Пример программы:

class My_Class {

public:

//конструктор по умолчанию

My_Class () {

_n = 0;

_values = NULL;

}

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

My_Class (My_Class &A) {

_n = A._n;

_values = new int [A._n];

for (int i = 0; i < A._n; i++)

_values[i] = A._values[i];

}

//конструктор с параметрами

My_Class (int *Mas, int N) {

_n = N;

_values = new int [_n];

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

_values[i] = Mas[i];

}

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

~My_Class () {

if (_values!= NULL)

delete _values;

}

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

My_Class operator = (My_Class &A) {

_n = A._n;

if (_values!= NULL)

delete _values;

_values = new int [_n];

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

_values[i] = A._values[i];

return *this;

}

//перегрузка оператора через дружественную функцию

friend My_Class operator + (My_Class &A, int value);

void print_class(char * str) {

printf("%s (n = %d) - ", str, _n);

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

printf("%d", _values[i]);

if (i < _n - 1)

printf(", ");

}

printf("\n", _n);

}

private:

int *_values;

int _n;

};

 

//определение дружественной функции для перегрузки оператора

My_Class operator + (My_Class &A, int value) {

int *tmp = new int [A._n + 1];

for (int i = 0; i < A._n; i++)

tmp[i] = A._values[i];

tmp[A._n] = value;

My_Class *new_A = new My_Class (tmp, A._n + 1);

return *new_A;

}

 

void main() {

int n = 3;

int *mas = new int [n];

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

mas[i] = i * 3 + 2;

 

//создание экземпляра класса с использованием конструктора по умолчанию

My_Class A;

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

My_Class B(mas, n);

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

My_Class C = B;

 

//проверка данных в классах

A.print_class("class A");

B.print_class("class B");

C.print_class("class C");

 

//использование перегруженных операторов

A = B + 3;

 

A.print_class("class A");

B.print_class("class B");

 

delete mas;

}

 

Задание кафедры:

Реализовать на языке C++ класс по варианту, который обладает возможностью выполнения действия в соответствии с приведенной таблицей. Реализованный класс должен содержать реализованные необходимы конструкторы, деструктор и перегруженные операторы.

Вар № Класс Возможность класса
  Матрица вещественных чисел Сложение двух матриц и присвоение результата третьей переменной-матрице осуществляется одной строкой C=A+B
  Разность двух матриц и присвоение результата третьей переменной-матрице осуществляется одной строкой C=A-B
  Умножение двух матриц и присвоение результата третьей переменной-матрице осуществляется одной строкой C=A*B
  Умножение матрицы на вещественное число и присвоение результата третьей переменной-матрице осуществляется одной строкой C=A*b, где b – вещественное число
  Умножение вещественного числа на матрицу и присвоение результата третьей переменной-матрице осуществляется одной строкой C=b*A, где b – вещественное число
  Деление матрицы на вещественное число и присвоение результата третьей переменной-матрице осуществляется одной строкой C=A/b, где b – вещественное число
  Обращение к i,j-ому элементу матрицы осуществляется одной строкой A[i][j]
  Матрица целых чисел Сложение двух матриц и присвоение результата третьей переменной-матрице осуществляется одной строкой C=A+B
  Разность двух матриц и присвоение результата третьей переменной-матрице осуществляется одной строкой C=A-B
  Умножение двух матриц и присвоение результата третьей переменной-матрице осуществляется одной строкой C=A*B
  Умножение матрицы на вещественное число и присвоение результата третьей переменной-матрице осуществляется одной строкой C=A*b, где b – целое число
  Умножение вещественного числа на матрицу и присвоение результата третьей переменной-матрице осуществляется одной строкой C=b*A, где b – целое число
  Деление матрицы на вещественное число и присвоение результата третьей переменной-матрице осуществляется одной строкой C=A/b, где b – целое число
  Обращение к i,j-ому элементу матрицы осуществляется одной строкой A[i][j]
  Булева матрица Конъюнкция двух матриц и присвоение результата третьей переменной-матрице осуществляется одной строкой C=A&&B
  Дизъюнкция двух матриц и присвоение результата третьей переменной-матрице осуществляется одной строкой C=A||B
  Операция исключающего ИЛИ двух матриц и присвоение результата третьей переменной-матрице осуществляется одной строкой C=A^B
  Множество вещественных чисел Объединение двух множеств и присвоение результата третьей переменной-множеству осуществляется одной строкой C=A+B
  Разность двух множеств и присвоение результата третьей переменной-множеству осуществляется одной строкой C=A/B
  Добавление вещественного числа в множество осуществляется одной строкой A+=b, где b – вещественное число
  Удаление вещественного числа из множества осуществляется одной строкой A/=b, где b – вещественное число
  Объединение множества и вещественного числа и присвоение результата третьей переменной-множеству осуществляется одной строкой C=A+b, где b – вещественное число
  Объединение множества и вещественного числа и присвоение результата третьей переменной-множеству осуществляется одной строкой C=b+A, где b – вещественное число
  Разность множества и вещественного числа и присвоение результата третьей переменной-множеству осуществляется одной строкой C=A/b, где b – вещественное число
  Множество целых чисел Объединение двух множеств и присвоение результата третьей переменной-множеству осуществляется одной строкой C=A+B
  Разность двух множеств и присвоение результата третьей переменной-множеству осуществляется одной строкой C=A/B
  Добавление целого числа в множество осуществляется одной строкой A+=b, где b – целое число
  Удаление целого числа из множества осуществляется одной строкой A/=b, где b – целое число
  Объединение множества и целого числа и присвоение результата третьей переменной-множеству осуществляется одной строкой C=A+b, где b – целое число
  Объединение множества и целого числа и присвоение результата третьей переменной-множеству осуществляется одной строкой C=b+A, где b – целое число
  Разность множества и целого числа и присвоение результата третьей переменной-множеству осуществляется одной строкой C=A/b, где b – целое число

Содержание отчета: сведения об авторе и работе, задание кафедры, цель работы, текст программы, выводы.

Контрольные вопросы:

1. Что такое конструктор и деструктор класса?

2. Какие бывают конструкторы?

3. Зачем нужен конструктор копирования?

4. Зачем нужен перегруженный оператор присваивания?

5. Какие существуют способы перегрузки операторов для класса?

6. Когда срабатывает конструктор копирования (без явного вызова)?

7. Когда вызывается деструктор класса?

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: