Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB02.DOC
Скачиваний:
2
Добавлен:
11.11.2019
Размер:
98.3 Кб
Скачать

Форматований вивід має вигляд:

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);

}

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