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

7.4.3. Функції, які не повертають значень (void-функції)

Як Ви помітили, функції, які не повертають значень, оголошуються з вказанням типу void. Це ключове слово не допускає їх використання у виразах і захищає від невірного застосування. У наведеному нижче прикладі функція print_vertical() виводить аргумент командного рядка у вертикальному напрямі (вниз) по лівому краю екрана. Оскільки ця функція не повертає ніякого значення, в її оголошенні використано ключове слово void.

Код програми 7.18. Демонстрація виведення аргументу командного рядка у вертикальному напрямі (вниз) по лівому краю екрана

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

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

void print_vertical(char *str);

int main(int argc, char *argv[])

{

if(argc==2) print_vertical(argv[1]);

getch(); return 0;

}

void print_vertical(char *str)

{

while(*str) cout << *str++ << "\n";

}

Оскільки print_vertical() оголошена як void-функція, то її не можна використовувати у виразі. Наприклад, наступна настанова неправильна і тому не скомпілюється:

х = print_vertical("Привіт!"); // помилка

Варто знати! У перших версіях мови C не було передбачено типу void. Таким чином, у старих С-програмах функції, які не повертають значень, за замовчуванням мали тип int. Якщо Вам доведеться натрапити на такі функції у процесі перекладу старих С-програм "на рейки" C++, просто оголосіть їх з використанням ключового слова void, зробивши їх void-функціями.

7.4.4. Функції, які повертають покажчики

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

Щоб повернути покажчик, функція повинна оголосити його тип як тип значення, що повертається. Ось як, наприклад, оголошується тип значення, що повертається, для функції fun(), яка повинна повертати покажчик на ціле число:

int *fun();

Якщо функція повертає покажчик, то значення, що використовується в її настанові return, також повинно бути покажчиком1.

У наведеному нижче коді програми продемонстровано механізм використання покажчика як типу значення, що повертається. Це нова версія наведеної вище функції find_substr(), тільки тепер вона повертає не індекс знайденого підрядка, а покажчик на неї. Якщо заданий підрядок не знайдений, повертається нульовий покажчик.

Код програми 7.19. Демонстрація нової версії функції find_substr(), яка повертає покажчик на підрядок

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

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

char *find_substr(char *sub, char *str);

int main()

{

char *substr;

substr = find_substr("три", "один два три чотири");

cout << "Знайдений підрядок: " << substr;

getch(); return 0;

}

// Функція повертає покажчик на шуканий підрядок або нуль,

// якщо такий не буде знайдено.

char *find_substr(char *sub, char *str)

{

int t;

char *p, *p2, *start;

for(t=0; str[t]; t++) {

p = &str[t]; // Встановлення покажчиків

start = p;

p2 = sub;

while(*p2 && *p2==*p) { // Перевірка збігу

p++;

p2++;

}

// Якщо досягнуто кінець р2-підрядка,

// то цей підрядок буде знайдено.

if(!*р2) return start; // Повертаємо покажчик на початок

// знайденого підрядка.

}

getch(); return 0; // Підрядок не знайдено

}

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

Знайдений підрядок: три чотири

У цьому випадку, коли підрядок "три" було знайдено в рядку "один два три чотири", функція find_substr() повернула покажчик на початок шуканого підрядка "три", який у функції main() був присвоєний змінній substr. Таким чином, під час виведення значення substr на екрані відобразився залишок рядка, тобто " три чотири".

Багато підтримуваних C++ бібліотечних функцій, призначених для оброблення рядків, повертають покажчики на символи. Наприклад, функція strcpy() повертає покажчик на перший аргумент.