- •Лабораторна робота n 2.
- •2.1. Перевантаження методів
- •Форматований вивід має вигляд:
- •2. Перевантаження операцій.
- •Результат роботи програми:
- •2.3. Використання friend-функцій для доступу до private-змінних класу.
- •У наступних завданнях, виконавши табуляцію деякої функції, виконати наступне:
- •Виконати перевантаження методів.
Форматований вивід має вигляд:
For angle 75 degrees.
Sinus = 0.955926
Cosinus = 0.258819
Tangens = 3.732051
For angle 36.305556 degrees.
Sinus = 0.592091
Cosinus = 0.805871
Tangens = 0.734722
For angle 145.72 degrees.
Sinus = 0.563238
Cosinus = - 0.826295
Tangens = - 0.681642
For angle 65.833333 degrees.
Sinus = 0.912358
Cosinus = 0.409392
Tangens = 2.228568
2. Перевантаження операцій.
Ідея переванетаженя операцій полягає в тому, що одна і та ж операція використовується з різними типами даних, подібно до того як, наприклад, "+" може використовуватися для знаходження суми чисел типів int, float, double.
В С++ можна перевантажувати наступн· операції:
-
+
*=
>=
&=
delete
-
/=
++
=
*
<<
/
>>
%
=
=
>>=
&
&&
<
<<=
%=
>
==
!
[]
+=
!=
|
()
=
<=
~
new
Основне обмеження полягає в тому, що синтаксис і пріорітет операції не можуть змінитися в порівнянні з початковим визначенням. Другий момент - перевантаження операції можливе тільки в області дії того класу, в якому ця операція виконується.
Синтаксис перевантаження операцій.
Для перевантаження операції використовується ключове слово оperator, за яким пишеться сама операція:
тип operator операція (список параметрів);
Наприклад:
angle_value operator + (angle_arg);
Тут angle_value - назва типу класу, за ним ключове слово operator, символ самої операції (+) і параметр, який передається перевантаженій операції.
Приклад.
Виконується перевантаження операції "+", після цього стає можливим безпосередньо додавати значення кутів, заданих в градусах, мінутах і секундах.
Файл sum_angl.h (протокол).
#include <strstream.h>
#include <stdlib.h>
#include <string.h>
class angle_value
{
int degress, minutes, seconds;
public:
angle_value()
degrees = 0,
minutes = 0,
seconds = 0;
//consructor
angle_value (char*);
angle_value operator + (angle_value);
char * info_display (void);
};
//// sum_angl.h - end
Файл реалізації sum_angl.cpp
angle_value :: angle_value(char*angle_sum)
{
degrees = atoi(strtok(angle_sum, "*"));
minutes = atoi(strtok(0, "'"));
seconds = atoi(strtok(0, "''"));
}
angle_value angle_value :: operator +(angle_value angle_sum)
{
angle_value ang;
ang.seconds=(seconds+angle_sum.seconds)%60; ang.minutes=((seconds+angle_sum.seconds)%60+minutes+angle_sum.minutes)%60; ang.degrees=((seconds+angle_sum.seconds)%60+minutes+angle_sum.minutes)%60; ang.degrees+=degrees+minutes+angle_sum.degrees);
return ang;
}
char *angle_value :: info_display()
{
char * ang [15];
ostrstream (*ang,sizeof (ang))<<degrees<<"*"<<minutes<<"'"<< seconds<<"''"<<ends;
return * ang;
}
/// sum_angle.cpp - end
Головна програма.
#include "sum_angl.h"
#include "sum_angl.cpp"
main()
{
angle_value angl1("37*15'56''");
angle_value angl2("10*44'44''");
angle_value angl3("75*17'59''");
angle_value angl4("130*32'54''");
angle_value sum_of_angles;
sum_of_angles=angl1+angl2+angl3+angl4;
cout <<"Summa of angles = "<<
sum_of_angles.info_display () << endl;
return (0);
}
