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

Лабораторна робота n 2.

Назва: Перевантаження методів класу і операцій.

Мета : Ознайомлення зі змістом поняття 'перевантаження' в

С++ та використання 'friend-функцій'.

2.1. Перевантаження методів

Методи класів, так як і звичайні функції С++, можна пере­вантажувати. Перевантаження функцій означає, що в поточній об­ласті дії одне і теж ім'я можуть використовувати декілька функцій. Компілятор вибирає потрібну функцію, враховуючи кількість і тип аргументів, використаних при її викликові.

В приведеному прикладі значення кута передається методам класу в двох форматах: як числа типу double або у вигляді строки. За допомогою перевантаження методів можна опрацьовувати обидва ці типи.

Приклад.

Програма дозволяє вводити значення кута в десятковому форматі або в форматі "градуси/м·нути/секунди". Один метод класу отримує дані типу double а другий - типу

string. Програма повертає значення синуса, косинуса тангенса.

Файл trig.h (протокол класу).

# include <iostream.h>

# include <math.h>

# include <string.h>

const double DEG_TO_RAD = 0.01745329;

class trigon

{

double angle;

double answer_sine;

double answer_cosine;

double answer_tangent;

public:

void trig_calc (double);

void trig_calc (char*);

};

Файл реалізації trig.cpp.

void trigon :: trig_calc(double degrees)

{

angle = degrees;

answer_sine = sin(angle * DEG_TO_RAD);

answer_cosine = cos(angle * DEG_TO_RAD);

answer_tangent = tan(angle * DEG_TO_RAD);

cout << "\n For angle: " << angle << " degrees " << endl; cout << "Sinus = " << answer_sine << endl;

cout << "Cosinus =" << answer_cosine << endl;

cout << "Tangens =" << answer_tangent << endl;

}

void trigon :: trig_calc(char*dat)

{

char * deg, *min, *sec;

deg = strtok (dat,"*");

min = strtok (0,"'");

sec = strtok (0,"’’");

angle = atof(deg) + ((atof(min)/60.0) + ((atof(sec)/360.0);

answer_sine = sin(angle * DEG_TO_RAD);

answer_cosine = cos(angle * DEG_TO_RAD);

answer_tangent = tan(angle * DEG_TO_RAD);

cout << "\n For angle: " << angle << " degrees " << endl; cout << "Sinus =" << answer_sine << endl; cout << "Cosinus =" << answer_cosine << endl; cout << "Tangens =" << answer_tangent << endl;

#include "trig.h"

#include "trig.cpp"

main ()

{

trigon data;

data.trig_calc(75.0);

data.trig_calc("35*75'20''");

data.trig_calc(145.72);

data.trig_calc("65*45'30''");

return (0);

}

В програмі використовується вбудована функція strtok(), прототип якої знаходиться в файлі string.h.

Ця функція має прототип:

char strtok (str1,*str2);

char *str1;

const char *str2;

Функція strtok() сканує першу строку str1 і шукає в ній послідовності символів (лексеми) - ( в даному приклад· це : *, ', '', - градуси, м·нути, секунди). Реальна довжина лексем може бути різна. В str2 міститься набір розділювачів: пробіли,, коми та інші особливі символи. Лексеми в str1 відокремлюються розділюва­чами, як і в str2. Після першого виклику strtok() повертає вказівник на першу лексему. При наступних викликах вона повертеµ вказівники на інші лексеми. Якщо в стрічці більше немаµ лексем, то повертається null-вказ·вник.

В наведеному прикладі значення кута можна зчитувати в двох форматах: або як десяткове значення, або як кутові градуси, мінути і секунди. У другому випадку для знаходження першої лек­семи використовується символ градуса (*) , для знаходження мінут - символ ('), для секунд - ('').

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