Перевантаження операцій С

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2024
Тип роботи:
Лабораторна робота
Предмет:
Інші
Група:
КН

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки, молоді та спорту України НУ «Львівська політехніка» Кафедра АСУ / Лабораторна робота №2 На тему: «Перевантаження операцій С++» Мета роботи: ознайомитись зі способами перевантаження операцій та навчитися використовувати їх при роботі з об’єктами. Послідовність роботи: 1. Ознайомитись зі способами перевантаження операцій у С++ 2. Проаналізувати приклад програми, яка оголошує клас та перевантажує низку операцій над точками у тривимірному просторі. Визначити результат її роботи. 3. Модифікувати текст програми, оголосивши операторні функції друзями класу( якщо це можливо). Запропонувати власні функції друзі-класу. 4. Для заданого варіанта завдання виконати перевантаження операцій для зручності роботи з об’єктами. При необхідності оголосіть певні операторні функції друзями класу. 5. Оформити звіт про роботу за такою структурою: назва роботи; мета роботи; послідовність роботи; індивідуальне завдання; текст програми; контрольний приклад та результати роботи програми; висновки. #include <iostream> #include <assert.h> using namespace std; class complex { double re, im; public: complex(double = 0, double = 0); ~complex(); complex operator + (complex&); complex operator - (complex&); complex operator * (complex&); complex operator / (complex&); complex operator ^ (unsigned); friend istream& operator >> (istream&, complex&); friend ostream& operator << (ostream&, complex&); }; complex::complex(double r, double i) { re = r; im = i; } complex::~complex() { } complex complex::operator + (complex& y) { return complex(re + y.re, im + y.im); } complex complex::operator - (complex& y) { return complex(re - y.re, im - y.im); } complex complex::operator * (complex& y) { return complex(re * y.re - im * y.im, re * y.im + im * y.re); } complex complex::operator / (complex& y) { double r1 = re, i1 = im, r2 = y.re, i2 = y.im; return complex((r1 * r2 - i1 * i2) / (r2 * r2 + i2 * i2), (-r1 * i2 + i1 * r2) / (r2 * r2 + i2 * i2)); } complex complex::operator ^ (unsigned n) { complex y(1, 0); for (unsigned i=1; i<=n; i++) y = y * (*this); return y; } istream& operator >> (istream& is, complex& x) { char c; is>>x.re; cin>>c; assert(c == ','); is>>x.im; return is; } ostream& operator << (ostream& os, complex& x) { os<<x.re<<','<<x.im<<endl; return os; } int main() { complex a(1, 1), b(1, 1), c(1, 1), x; cout<<"Insert complex number :"; cin>>x; cout<<"Result: "<<a*(x^2) + b * x + c<<endl; system("pause"); return 0; } Індивідуальне завдання: Створити клас – трикутник. У закритій частині описати поля – довжини сторін. Визначити необхідні конструктори, методи доступу, деструктор. Перевантажити потокові операції введення і виведення, операції порівняння за периметром <,> та ==, за площею <=, >= та !=. Розвязок: Модифікований код базового класу: #include <iostream> #include <assert.h> using namespace std; class complex { double re, im; public: complex(double = 0, double = 0); ~complex(); friend complex operator + (complex&, complex); friend complex operator - (complex&, complex); friend complex operator * (complex&, complex); friend complex operator / (complex&, complex); friend bool operator == (complex&, complex); complex operator ^ (unsigned); friend istream& operator >> (istream&, complex&); friend ostream& operator << (ostream&, complex&); }; complex::complex(double r, double i) { re = r; im = i; } complex::~complex() { } complex operator + (complex& y, complex x) { return complex(x.re + y.re, x.im + y.im); } complex operator - (complex& y, complex x) { return complex(x.re - y.re, x.im - y.im); } complex operator * (complex& y, complex x) { return complex(x.re * y.re - x.im * y.im, x.re * y.im + x.im * y.re); } complex operator / (complex& y, complex x) { double r1 = x.re, i1 = x.im, r2 = y.re, i2 = y.im; return complex((r1 * r2 - i1 * i2) / (r2 * r2 + i2 * i2), (-r1 * i2 + i1 * r2) / (r2 * r2 + i2 * i2)); } bool operator == (complex& x, complex y) { if (x.im == y.im && x.re == y.re) return true; else return false; } complex complex::operator ^ (unsigned n) { complex y(1, 0); for (unsigned i=1; i<=n; i++) y = y * (*this); return y; } istream& operator >> (istream& is, complex& x) { char c; is>>x.re; cin>>c; assert(c == ','); is>>x.im; return is; } ostream& operator << (ostream& os, complex& x) { os<<x.re<<','<<x.im<<endl; return os; } int main() { complex a(1, 1), b(1, 1), c(1, 1), d(1,2), x; cout<<"Insert complex number :"; cin>>x; cout<<"Result: "<<a*(x^2) + b * x + c<<endl; if (c==a) cout<<"c = a"<<endl; else cout<<"c != a"<<endl; if (b==d) cout<<"b = d"<<endl; else cout<<"b != d"<<endl; system("pause"); return 0; } / Індивідуальне завдання: #include <iostream> using namespace std; class triangle { double a, b, c; public: void set_a(double); void set_b(double); void set_c(double); double get_a(); double get_b(); double get_c(); double area(); double area(double, double, double); double perimeter(); double perimeter(double, double, double); bool operator <= (triangle); bool operator >= (triangle); bool operator != (triangle); bool operator < (triangle); bool operator > (triangle); bool operator == (triangle); triangle(double a1, double a2, double a3); ~triangle() {} }; void triangle::set_a(double temp) { a = temp; } void triangle::set_b(double temp) { b = temp; } void triangle::set_c(double temp) { c = temp; } double triangle::get_a() { return a; } double triangle::get_b() { return b; } double triangle::get_c() { return c; } double triangle::area() { double p = (a + b + c)/2; return sqrt(p*(p-a)*(p-b)*(p-c)); } double triangle::area(double x, double y, double z) { double p = (y + x + z)/2; return sqrt(p*(p-x)*(p-y)*(p-z)); } double triangle::perimeter() { return a + b + c; } double triangle::perimeter(double x, double y, double z) { return x + y + z; } bool triangle::operator <= (triangle ob) { if (area()<=area(ob.a, ob.b, ob.c)) return true; else return false; } bool triangle::operator >= (triangle ob) { if (area()>=area(ob.a, ob.b, ob.c)) return true; else return false; } bool triangle::operator != (triangle ob) { if (area()!=area(ob.a, ob.b, ob.c)) return true; else return false; } bool triangle::operator < (triangle ob) { if (perimeter()<perimeter(ob.a, ob.b, ob.c)) return true; else return false; } bool triangle::operator > (triangle ob) { if (perimeter()>perimeter(ob.a, ob.b, ob.c)) return true; else return false; } bool triangle::operator == (triangle ob) { if (perimeter()==perimeter(ob.a, ob.b, ob.c)) return true; else return false; } triangle::triangle(double a1, double a2, double a3) { a = a1; b = a2; c = a3; } int main() { triangle a(4,5,6), b(7,8,9), c(7,7,10), d(6,5,4); cout<<"Start data:"<<endl; cout<<"Triangle 1: area("<<a.area()<<"), perimeter("<<a.perimeter()<<")"<<endl; cout<<"Triangle 1: area("<<b.area()<<"), perimeter("<<b.perimeter()<<")"<<endl; cout<<"Triangle 1: area("<<c.area()<<"), perimeter("<<c.perimeter()<<")"<<endl; cout<<"Triangle 1: area("<<d.area()<<"), perimeter("<<d.perimeter()<<")"<<endl; cout<<"End data\n"<<endl; if (a > b) cout<<"Perimeter A > perimeter B"<<endl; if (a > c) cout<<"Perimeter A > perimeter C"<<endl; if (a > d) cout<<"Perimeter A > perimeter D"<<endl; if (a < b) cout<<"Perimeter A < perimeter B"<<endl; if (a < c) cout<<"Perimeter A < perimeter C"<<endl; if (a < d) cout<<"Perimeter A < perimeter D"<<endl; if (a == b) cout<<"Perimeter A = perimeter B"<<endl; if (a == c) cout<<"Perimeter A = perimeter C"<<endl; if (a == d) cout<<"Perimeter A = perimeter D"<<endl; if (a >= b) cout<<"Area A >= area B"<<endl; if (a >= c) cout<<"Area A >= area C"<<endl; if (a >= d) cout<<"Area A >= area D"<<endl; if (a <= b) cout<<"Area A <= area B"<<endl; if (a <= c) cout<<"Area A <= area C"<<endl; if (a <= d) cout<<"Area A <= area D"<<endl; if (a != b) cout<<"Area A != area B"<<endl; if (a != c) cout<<"Area A != area C"<<endl; if (a != d) cout<<"Area A != area D"<<endl; system("pause"); return 0; } / Висновок: На даній лабораторній роботі я навчився перевантажувати оператори по відношенню до об’єкта. Також я навчився оголошувати та використовувати дружні функції.
Антиботан аватар за замовчуванням

19.04.2012 14:04-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!