Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

10.1.7. Повернення функцією структури як значення

Для повернення функцією структури як значення використовується механізм повернення параметрів за значенням. Це означає, що будь-які зміни, внесені у вміст структури, яка визначена в тілі функції, впливають на структуру, якій присвоюється значення, що повертається цією функцією. Проте необхідно мати на увазі, що повернення великих структур вимагає значних витрат системних ресурсів. Як правило, чим більше даних повертається функцією, тим більше витрачається системних ресурсів.

Використовуючи структуру як параметр, необхідно також пам'ятати, що тип структури повинен відповідати типу повернутого значення. Наприклад, у наведеному нижче коді програми спочатку оголошується структура demoStruct, а потім функція fun_a() приймає параметр типу demoStruct.

Код програми 10.4. Демонстрація механізму повернення функцією структури як значення

#include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

struct demoStruct { // Оголошення типу структури

int a;

char ch;

};

void fun_a(demoStruct pm, char zm); // Оголошення прототипу функції

demoStruct fun_b(demoStruct pm); // Оголошення прототипу функції

int main()

{

demoStruct arg1={1000,'x'}, arg2; // Визначення структурних змінних

fun_a(arg1,'1'); // Передача структури функції як аргументу

arg2 = fun_b(arg1); // Повернення функцією структури як значення

fun_a(arg2,'2'); // Передача структури функції як аргументу

getch(); return 0;

}

void fun_a(demoStruct pm, char zm) // Визначення функції

{

cout << "Передана функції структура arg" << zm

<< ": a= " << pm.a << "; ch= " << pm.ch << "\n";

}

demoStruct fun_b(demoStruct pm) // Визначення функції

{

demoStruct pn;

pn.a = 3*pm.a;

pn.ch = 'y';

return pn;

}

Внаслідок виконання цієї програми на моніторі буде відображено такий результат:

Передана функції структура arg1: a= 1000; ch= x

Передана функції структура arg2: a= 3000; ch= y

У цій програмі як аргументи arg1 і arg2 у функції main(), так і параметр pm у функції fun_a() мають однаковий тип. Аналогічно у функції fun_b() визначена структурна змінна pn має цей самий тип. Тому аргументи arg1 і arg2 можна передати функції fun_a(), а значення структурної змінної pn можна повернути з функції fun_b() у функції main(). Якби типи цих структур були різні, у процесі компілювання коду програми було б видано повідомлення про помилку. Окрім цього, у функції fun_a() як аргумент передається проста змінна типу char для ідентифікування назви структурної змінної.

10.2. Використання покажчиків на структури і оператора "стрілка"

У мові програмування C++ покажчики на структури можна використовувати так само, як і покажчики на змінні будь-якого іншого типу. Проте використання покажчиків на структури має ряд особливостей, які необхідно враховувати.

10.2.1. Особливості використання покажчиків на структури

Покажчик на структуру оголошується так само, як покажчик на будь-яку іншу змінну, тобто за допомогою символу "*", поставленого перед іменем структурної змінної. Наприклад, використовуючи визначену вище структуру invStruct, можна записати таку настанову, яка оголошує змінну inv_pointer покажчиком на дані типу invStruct:

invStruct *inv_pointer;

Щоб знайти адресу структурної змінної, необхідно перед її іменем розмістити оператор "&". Наприклад, припустимо, що за допомогою наведеного нижче коду програми ми оголошуємо структуру, визначаємо структурну змінну і покажчик на структуру оголошеного нами типу:

struct balStruct { // Оголошення типу структури

float balance;

char nazva[80];

} person; // Визначення структурної змінної

balStruct *p; // Визначаємо покажчик на структуру.

Тоді у процесі виконання настанови

p = &person;

у покажчик р буде поміщено адресу структурної змінної person.

До членів структури можна отримати доступ за допомогою покажчика на цю структуру. Але|та| у цьому випадку використовується не оператор "крапка", а оператор "->". Наприклад, у процесі виконання такої настанови ми отримуємо доступ до поля balance через покажчик р:

p->balance

Оператор "->" називається оператором "стрілка". Він утворюється з використанням знаків "мінус" і "більше".

Оператор "стрілка" (->) дає змогу отримати доступ до членів структури за допомогою покажчика.

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

Необхідно пам'ятати! Щоб отримати доступ до членів структури, необхідно використовувати оператор "крапка". Щоб отримати доступ до членів структури за допомогою покажчика, потрібно використовувати оператор "стрілка".