Створення|створіння| функції
Функція підскік.
void JumpJack() // заголовок функції з|із| ім'ям JumpJack
{ //межа|кордон| функції : почало|зачинало|
Sal.up(); //дія 1
Sal.ready(); //дія 2
} //межа|кордон| функції : кінець
Інструкції, що розташовані між межами функції називаються тілом функції.
У кінці|в кінці| рядка - |ізаголовка функції крапка з комою не ставиться. Якщо її поставити, то компілятор буде думати, що інструкція закінчується ще до початку|начала| тіла функції .
// c2jmpjck.cpp
/*
У цій програмі для виконання вправ Сел використовує
Функцію JumpJack
*/
#include "franca.h"
athlete Sal; // створення|створіння| об'єкту класу athlete
void JumpJack() // Початок|начало| функції з|із| ім'ям JumpJack
{
Sal.up(); // up
Sal.ready(); // ready
} //Кінець функції з|із| ім'ям JumpJack
void mainprog() //Початок|начало| головної|чільної| функції з|із| ім'ям mainprog
{
Sal.ready(); // початкове|вихідне| положення|становище|
JumpJack(); // підскік1 (виклик функції)
JumpJack(); // підскік2 (виклик функції)
JumpJack(); // підскік3 (виклик функції)
} //Кінець головної|чільної| функції з|із| ім'ям mainprog
Функція mainprog аналогічна іншим, за винятком того, що має бути присутня в кожній програмі. У функції mainprog() можна викликати|спричиняти| інші функції. У нашому прикладі|зразку| була викликана функція JumpJack().
Функція має бути визначена (описана) до її першого використання (виклику).
Якщо ми створимо ще один об'єкту класу athlete, наприклад, Sally, то змусити|примусити| зробити її підскік розробленою функцією ми не зможемо, оскільки усі перераховані в ній дії призначені для Сэла.
Аргументи і|та| параметри
Для того, щоб Салі і Сел могли виконувати дії за допомогою однієї і тієї ж функції необхідно ввести аргументи, в якості яких в даному випадку виступають об’єкти Сел і Саллі. Але при створенні функції конкретні значення цих об’єктів ми можемо не знати|наперед|. Отже, ми говоримо про фіктивні об’єкти. –формальні параметри або просто параметрами (parameters).
Реальні об'єкти, які ми задаємо при виклику функції,, називають фактичними параметрами або аргументами (arguments) .
Змінимо|зраджуватимемо| функцію JumpJack() так, щоб вона могла управляти діями як Сэла, так і Салі (чи будь-якого іншого гімнаста|).
1. Дамо ім'я фіктивному об’єкту somebody (хтось). Це і|та| є формальний параметр.
2. Змусимо|примусимо| спочатку Сєла, а потім Салі зіграти роль цього хтось. Це і|та| будуть фактичними параметрами, які ми будемо задавати при виклику функції.
#include "franca.h"
athlete Sal, Sally;
void JumpJack(athlete somebody)
{
somebody.up();
somebody.ready();
}
void mainprog()
{
Sal.ready();
JumpJack(Sal);
Sal.say("Sal");
Sally.ready();
JumpJack(Sally);
Sally.say("Sally");
}
Аргументи за умовчанням
Нехай|хай|, ми хочемо, щоб в більшості випадків вправу виконував Сел і|та| тільки|лише| іноді|інколи| Салі. У заголовку функції ми можемо задати значення за умовчанням
void JmpJack(athlete sombody=Sal)
Таким чином, виклик функції JmpJack(); аналогічний виклику JmpJack(Sal);
Якщо ми хочемо, щоб вправи віконувала Салі, то скористаємося викликом функції JmpJack(Sally);
Функції декількох аргументів
У C++ в одній програмі можливе співіснування декількох функцій з одним ім'ям, але з різним числом або типом (класом) аргументів.
Завдання|задача| 1: Створити дві функції з|із| одним ім'ям JmpJack(). В одній з них вправа виконується одним гімнастом а в іншій - обома|обоє| гімнастами.
// c2jmpjck.cpp
#include "franca.h"
athlete Sal, Sally,Kolya;
Clock MyTime;
void JmpJack(athlete somebody)
{
somebody.up();
somebody.ready();
}
void JmpJack(athlete first, athlete second)
{
first.left();
first.say("Перший");
second.right();
second.say("Другий");
}
void mainprog()
{
JmpJack(Sal,Sally);
JmpJack(Kolya);
Kolya.say("Kolya");
}
Завдання|задача| 2: Створити функцію, для виконання одночасного підскоку двох гімнастів :
1. Перший гімнаст залишається в початковому|вихідному| положенні|становищі| 0 секунд.
2. Другий гімнаст залишається в початковому|вихідному| положенні|становищі| 1 секунду.
3. Перший гімнаст знаходиться|перебуває| в стрибку 0 секунд.
4. Другий гімнаст знаходиться|перебуває| в стрибку 1 секунду.
5. Перший гімнаст залишається в початковому|вихідному| положенні|становищі| 0 секунд.
6. Другий гімнаст залишається в початковому|вихідному| положенні|становищі| 1 секунду.
// c2jmpjck.cpp
#include "franca.h"
athlete Sal, Sally,Kolya;
void JmpJack(athlete first, athlete second)
{
first.ready(0);
second.ready(1);
first.up(0);
second.up(1);
first.ready(0);
second.ready(1);
}
void mainprog()
{
JmpJack(Sal,Sally);
JmpJack(Sal,Sally);
}
Функции-члены и просто функции.
У объекта некоторого класса имеются функции обработки всех предназначенных для него сообщений. Например, объекты класса athlets имеют следующие функции: ready(), up(), left() и т.д
Эти функции являются частями класса (функции-члены класса athlets) и не могут выполняться независимо от него. Функции-члены могут быть определены только после определения соот- ветствующего класса.
JmpJack() не относится ни к одному из классов и поэтому называется просто функцией.