Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекції ООП1.doc
Скачиваний:
7
Добавлен:
17.11.2019
Размер:
554 Кб
Скачать
☆

„Дружні" функції.

Функції — друзі класу являються звичайними функціями; єдина відмінність – наявність прав доступу до закритих членів об'єктів даного класу. Щоб функція стала другом класу її прототип необхідно включити в

визначення класу, використовуючи при цьому ключове слово ітіепд. Прототип може знаходитися як в розділі закритих членів, так і в розділі відкритих членів (але, так як у будь - якому випадку відповідна йому функція буде відкритою, то краще поміщати її в розділ відкритих членів). Синтаксис класу з використанням функцій - друзів

class Ім'я класу

{

public:

friend Прототип функції - друга 1.

friend Прототип функції - друга 2.

\\ Функції - члени не обов 'язково повинні іти першими. Вони можуть чергуватися з прототипами функцій - членів.

Прототипи функцій - членів.

private:

Оголошення та прототипи закритих членів

};

Приклад

class FuelTank

{

public:

friend double need_to_fill (FuelTank the_tank);

\\ змінним - членам об 'єкту іНе іапк присвоєні значення. Повертає

кількість літрів, які необхідно для заповнення баку.

FuelTank (double the_capacity, double the_level );

FuelTank ( );

void input ( );

void output ( );

private:

double capacity;

double level;

};

Функції - друзі не являються функціями - членами. Вони визначаються і викликаються так само як звичайні функції.

Заняття №8

Тема: Інтерпретація об'єктів.

Мета: Освоїти принципи поліморфізму. Узгодження типів. План заняття:

  1. Поліморфізм.

  2. Узгодження типів.

  3. Функції перетворення \ приведення типів. Запис з варіантами.

Перевантаження функцій.

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

Зауваження 1. Для функцій, які відрізняються типом значення, яке вони повертають, і мають однаковий набір аргументів, перевантаження у мові С++ не визначено, тобто їм надавати однакові імена не можна.

Приклад 1. Використовуючи шаблони функції, скласти програму для упорядкування трьох уведених даних або дробового, або цілого типу.

<<include < iostream.h >

<<include < conio.h >

// Оголошення шаблона функції

template <class Mytype >

void Sort(Mytype n1, Mytype n2, Mytype n3);

void main( )

{

clrscr ( );

int і1, і2, iЗ, k; char с1, с2, c3;

cout << Введіть 1 для впорядкування символів, 2 - чисел\п";

cin >> k;

if (k == 1) {

cout << "Уведіть три символи";

cin >> c1 >> с2 >> с3;

Sort (с1, с2, с3);

}

if ( k == 2 )

{

cout << "Уведіть три числа":

cin >> I1 >> I2 >> I3;

Sort (I1,I2, І3);

} getch ( );

}

template < class Mytype > // Опис шаблона функції

void Sort(Mytype n1, Mytype n2, Mytype n3)

{

Mytype c;

if (n1 > n2) {с = n1; n1 = n2; n2 = с;} if (n2 > nЗ) {с = n2; n2 = n3; n3 = с;)

if (n1 > n2) {с = n1; n1 = n2; n2 = с;}

cout << n1 << “\t” << n2 << “\t” << n3;

}