Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №8 ПВСИБ

.docx
Скачиваний:
6
Добавлен:
27.04.2022
Размер:
31.22 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций

Российской Федерации

Ордена Трудового Красного Знамени

федеральное государственное бюджетное образовательное учреждение

высшего образования

Московский технический университет связи и информатики

(МТУСИ)

Кафедра «Информационная безопасность»

ОТЧЕТ ПО ЛАБОРАТОРНОЙ РАБОТЕ №8

по дисциплине

«Программирование в системах информационной безопасности»

на тему

«Понятие класса. Члены класса. Друзья класса. Перегрузка операций»

Вариант №00

Выполнил:

студент группы

Проверил:

старший преподаватель кафедры ИБ

Барков В. В.

_______________________

Москва ****

Цель

Научиться создавать простые классы, создавать конструкторы, перегружать операции, создавать объекты классов и передавать их в функции

Задание

В соответствии с Вашим вариантом разработать класс. Название класса, приватные данные-члены и необходимые публичные функции-члены указаны в таблице ниже.

Для всех вариантов необходимо перегрузить операции + - * / и операцию приведения типа к типу double.

Составить пользовательскую функцию y, указанную в индивидуальном задании и необходимые вспомогательные функции

Вариант

19

Название класса

Complex

Приватные данные-члены

double re; (действительная часть)

double im; (мнимая часть)

Публичные функции-члены

double Re() const;

double Im() const;

double R() const;

double Phi() const;

Пользовательские функции

Complex y(const Complex &z);

Вспомогательные функции

Complex sin(const Complex &z);

Complex cos(const Complex &z);

Complex ch(const Complex &z);

Complex sh(const Complex &z);

Complex exp(const Complex &z);

Complex pow(const Complex &z1, const Complex &z2);

Complex y(const Complex &z);

19.

Листинг 1 – программный код файла complex.cpp

#include "Header.h"

#include "math.h"

#include<iostream>

Complex::Complex():

m_re{ sqrt(0)}, m_im{ atan2(0, 0) }

{}

Complex::Complex(double re):

m_re{ re }, m_im{ 0 }

{}

Complex::Complex(double re, double im) :

m_re{ re }, m_im{ im }

{}

double Complex::Re() const

{

return m_re;

}

double Complex::Im() const

{

return m_im;

}

double Complex::R() const

{

return sqrt(pow(m_re, 2) * pow(m_im,2));

}

double Complex::Phi() const

{

return atan2(m_im, m_re);

}

Complex Complex::operator- ()

{

return Complex(-Re(), -Im());

}

Complex& Complex::operator+=(const Complex& right)

{

*this = Complex(Re() + right.Re(), Im() + right.Im());

return *this;

}

Complex& Complex::operator-=(const Complex& right)

{

*this = Complex(Re() - right.Re(), Im() - right.Im());

return *this;

}

Complex& Complex::operator*=(const Complex& right)

{

*this = Complex(Re() * right.Re(), Im() * right.Im());

return *this;

}

Complex& Complex::operator/=(const Complex& right)

{

*this = Complex(Re() / right.Re(), Im() / right.Im());

return *this;

}

Complex Complex::operator+ (const Complex& right)

{

Complex res = *this;

return res += right;

}

Complex Complex::operator- (const Complex& right)

{

Complex res = *this;

return res -= right;

}

Complex Complex::operator* (const Complex& right)

{

Complex res = *this;

return res *= right;

}

Complex Complex:: operator/ (const Complex& right)

{

Complex res = *this;

return res /= right;

}

ostream& operator<<(ostream& out, const Complex& c)

{

out << "(" << c.Re() << ", " << c.Im() << ")";

return out;

}

istream& operator>>(istream& in, Complex& c)

{

in >> c.m_re >> c.m_im;

return in;

}

Complex sinh(const Complex& c)

{

return Complex(sinh(c.Re())*cos(c.Im()), cosh(c.Re())*sin(c.Im()));

}

Листинг 2 – программный код файла Header.h

#include "math.h"

#include<iostream>

using namespace std;

class Complex

{

public:

Complex();

Complex(double);

Complex(double, double);

double Phi() const;

double R() const;

double Re() const;

double Im() const;

Complex& operator+=(const Complex& right);

Complex& operator-=(const Complex& right);

Complex& operator*=(const Complex& right);

Complex& operator/=(const Complex& right);

Complex operator+ ( const Complex& right);

Complex operator- ( const Complex& right);

Complex operator* ( const Complex& right);

Complex operator/ ( const Complex& right);

Complex operator- ();

explicit operator double()

{

return m_re;

}

friend ostream& operator<<(ostream& out, const Complex& c);

friend istream& operator>>(istream& in, Complex& c);

private:

double m_re = 0;

double m_im = 0;

};

Complex sinh(const Complex& c);

Листинг 3 – программный код файла main.cpp

#include<iostream>

#include "math.h"

#include "Header.h"

using namespace std;

Complex y(Complex& z)

{

Complex i(0, 1);

Complex res = i + z * sinh(z + 1);

return res;

}

int main()

{

setlocale(LC_ALL, "RUS");

Complex a, res;

cout << "Введите действительную и мнимую часть комплексного числа" << endl;

cin >> a;

res = y(a);

cout << res;

}

Рисунок 1 – Результат работы с программой

Вывод

В данной работе были разобрана работа с классами в языке программирования С++, а именно перегрузка операторов и работа с публичными и приватными полями класса.