
- •Лабораторна робота n 2.
- •2.1. Перевантаження методів
- •Форматований вивід має вигляд:
- •2. Перевантаження операцій.
- •Результат роботи програми:
- •2.3. Використання friend-функцій для доступу до private-змінних класу.
- •У наступних завданнях, виконавши табуляцію деякої функції, виконати наступне:
- •Виконати перевантаження методів.
Результат роботи програми:
Summma of angles = 253*51'33''
*
2.3. Використання friend-функцій для доступу до private-змінних класу.
Особливістю кожного класу є можливість ізолювати дані - це дані типу private, до яких мають доступ тільки функції-елементи класу - так звані friend-функції. Ці функції дозволяють використовувати приватну інформацію класу, без того, щоб бути елементами класу. Ці функції не описуються в самому класі, але можуть працювати з тими ж ресурсами класу, до яких звертаються friend-функції.
Приклад.
Програма отримує від системи дату і час у формі строки. Час переводиться в секунди.
Файл times.h (протокол).
#include <iostream.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
class time_class
{
long secs;
friend char* present_time(time_class);
public:
time_class (char*);
};
Файл times.cpp
time_class :: time_class (char*tm)
{
char *hours, *minutes, *seconds;
// дані повертаються у формі строки:
// (день місяць дата години: хвилини: секунди р·к
// Пропускається три лексеми:
// день, місяць і дата
hours = strtok(tm, " ");
hours = strtok(0, " ");
hours = strtok(0, " ");
//отримання часу з строки
hours = strtok(0,":");
minutes = strtok(0," ");
secs = atol(hours)*3600;
secs+ = atol(minutes)*60;
secs+ = atol(seconds);
//// times.cpp - end.
// Головна програма.
char *present_time (time_class); // прототип дружньоїфункції
main ()
{
struct tm *ptr;
time_t ltime;
ltime = time(NULL);
ptr = localtime (<ime);
time_class tz(asctime (ptr));
cout << "Інформаційна строка дати/часу:" << asctime (ptr) << endl;
cout << "час в секундах: " << present_time(tz) << endl;
return (0);
}
// Опис дружньој функції
char * present_time (time_class tz)
{
char * ctbuf;
ctbuf = new char[40];
long int seconds_total;
seconds_total = tz.secs;
ltoa (seconds_total,ctbuf,10);
return (ctbuf);
}
Коментар.
В функції main() системний час отримується за допомогою типу time_t і зв"язаної з ним структури tm. Функція asctime(ptr) перетворює вказівник ptr на вказівник, який вказує на ASII-строку, яка містить дату і час. Конструктор time_class (char*) за допомогою функції strtok() перетворює строку в цілочисельні дані, які friend-функція present_time знову переводить в тип char, маючи доступ до змінної (приватної) secs через об'єкт tz класового типу time_class.
З А В Д А Н Н Я
1. Виконати множення двох відрізків :
[
| [c, b], якщо (a < c <= b) · (c <= b < d);
| [c, d], якщо (a < c <= d) · (c <= d < b);
| [a, d], якщо (c < a <= d) · (a <= d < b);
[a, b]*[c, d] = {
| [a, b], якщо (c <= a < b) · (a < b < d);
| [0, 0], якщо b < c < d;
| [0, 0], якщо d < a < b;
[
2. Виконати додавання відрізків, що перетинаються:
(min(a, b, c, d), (max(a, b, c, d)).
Кон'юнкція - * множення двох логічних виразів, задано таблицею істинності
p | q | p*q
----------------
1 | 1 | 1
0 | 1 | 0
1 | 0 | 0
0 | 0 | 0
4. Диз'юнкція - + додавання двох логічних виразів, задано таблицею істинності
p | q | p+q
----------------
1 | 1 | 1
0 | 1 | 1
1 | 0 | 1
0 | 0 | 0
5. Імплікація - / ділення двох логічних виразів, задана таблицею істинності
p | q | p/q
----------------
1 | 1 | 1
0 | 1 | 0
1 | 0 | 0
0 | 0 | 1
Задана послідовність з n нерівних між собою чисел. Додавання визна
чається як сума чисел цієї послідовності, розміщених між максимальним
і мінімальним числами ( в суму не включати ці два числа).
Задані координати n точок на площині: (x1, y1), … , (xn, yn). Знайти
номери двох точок, відстань між якими найбільша (вважати, що така
пара точок єдина). Додавання визначити як суму знайдених номерів.
Операція множення визначається по формулі:
y = (3 + (6 + (9 + ….. (3n + (3n + 3)1/2)1/2)1/2)1/2)1/2 .
Задана непуста послідовність різних натуральних чисел, за якою слідує 0.
Операцію додавання визначити порядковим номером найменшого, не
рівного нулеві, числа з цієї послідовності.
Множення двох натуральних чисел визначається як їх найбільший
спільний дільник.
Диз'юнкція - + додавання двох логічних виразів, задано так:
якщо серед чисел sin(xn) є хоча б одне від’ємне число, то логічній
змінній t присвоїти значення 1, інакше - значення 0.
Результатом додавання є перше від’ємне значення послідовності
cos(tg n), n = 1, 2 3, ….
Для заданого натурального n операція множення визначається
результатом обчислення по формулі
x0 =1, xn = nxn-1 + 1/n .
Логічне додавання визначається так: якщо два натуральні числа -
парні, то логічгій змінній t присвоїти значення 1, якщо обидва -
непарні - значення 0.
14. Логічне множення визначається таблицею істинності
p | q | p*q
---------------
1 | 1 | 0
0 | 1 | 1
1 | 0 | 1
0 | 0 | 0
15. Логічна операція “” задано таблицею істинності
p | q | pq
----------------
1 | 1 | 0
0 | 1 | 1
1 | 0 | 0
0 | 0 | 0
16. Задана послідовність з n нерівних між собою чисел. Додавання визна
чається як сума чисел цієї послідовності, розміщених між максимальним
і мінімальним числами ( в суму включати ці два числа).
17. Множення двох натуральних чисел визначається як їх найменший спільний дільник.