Приклад. int n = 10,S; //S = довільне ціле
int sum_next(int);
void main()
{
int n = 10,S; //S = довільне ціле
for (int i=1;i<=n;i++)
S = sum_next(i); //S = 55
}
int sum_next(int n)
{
static int S=0;//Обчисюється 1 раз
S+=n; //під час компіл
return S;
}
Дана програма обчислює суму перших 10 цілих додатних чисел.
Extern – використовується для передачі для передачі значень глобальних змінних з одного файлу в інший (часто великі програми складаються з кількох файлів).
Область дії – всі файли, з яких складається програма.
Volatile – застосовується до глобальних змінних, значення яких можуть надходити від переферійних пристроїв (наприклад від системного таймера)
2. Локальні та глобальні змінні
Змінні, які описані поза всіма функціями, тобто на початку програми називаються глобальними (змінна m). До глобальних змінних можна звернутися з будь-якої функції та блока.
Глобальні об’єкти можуть використовуватися для повернення результату підпрограми. Тобто в підпрограмі можна не використовувати команди return: передати значення головній програмі можна відразу в тілі підпрограми, надавши значення глобальній змінній. Але такий підхід не є професійним, так як в цьому випадку підпрограму стає неможливо багаторазово використовувати для зміни значень різним глобальним об’єктам.
Приклад. Програма знаходження більшого з трьох чисел
#include<iostream.h>
#include<conio.h>
float m; //Глобальна змінна
void max(float,float,float);
void main()
{
clrscr(); float x,y,z;
cout<<"x = ";cin>>x;
cout<<"y = ";cin>>y;
cout<<"z = ";cin>>z;
max(x,y,z); //Змінюємо значення глобальної m
cout<<"Максимальне - "<<m<<endl;
getch();
}
//----------------------
void max(float a,float b,float c)
{
if (a>b&&a>c) m = a;
else if (b>c) m = b; else m = c;
}
Функція max(float,float,float) має тип void. Це означає, що дана функції ніякого значення головній програмі не повертає. Аналогом функції типу void є процедури в інших мовах програмування (наприклад Паскаль). Саме в підпрограмах типу void команда return не використовується.
Одна з цілей, що досягається в застосуванні інкапсуляції – це обмежений доступ до конструкції, розташованої в середині під програмної капсули. Це можливість використовувати програмні об’єкти тільки всередині капсули. Такі об’єкти називаються локальними. Вони описуються в тілі підпрограми. Локальні об’єкти– це об’єкти які створюються в момент виклику підпрограми, і існують до тих пір, поки виконується тіло підпрограми. Коли по завершенню роботи підпрограми керування передається головній програмі пам’ять виділена під локальні об’єкти вивільняється, тобто усі локальні об’єкти знищуються. Тому у різних функціях однієї і тієї програми можна використовувати змінні з однаковими іменами. Локальні об’єкти – це об’єкти описані всередині підпрограми.
Приклад. Програма знаходження більшого з трьох чисел
#include<iostream.h> #include<conio.h>
float Max(float,float,float);
void main()
{
clrscr(); float x,y,z,m;
cout<<"x = ";cin>>x;
cout<<"y = ";cin>>y;
cout<<"z = ";cin>>z;
m = Max(x,y,z);
cout<<"Максимальне - "<<m<<endl;
getch();
}
float Max(float a,float b,float c)
{
float m; //Локальна
if (a>b&&a>c) m = a; else if (b>c) m = b; m = с;
return m;
}
Зауважемо, що змінна m оголошена відразу у двох функціях main() та Max().
Коли в головній функції виконується команда m = Max(x,y,z), то згідно із правилом дії оператора присвоєння спочатку викликається функція Max(x,y,z). Значення змінних x,y,z передаються параметрам a,b,c підпрограми Max(), а також створюється локальна змінна m (вона описана всередині підпрограми Max()), значення якої обчислюється в результаті роботи операторів цієї капсули. Команда return m передає це значення головній функції як значення функції Max(x,y,z), коли її робота завершується. При цьому локальна змінні m, оголошена в функції Max() знищується і існує лише єдина m, яка оголошена в головній функції main(). Цій змінній і надається значення функції Max(x,y,z)
Параметр сполучає підпрограму з її оточенням. Параметри використовуються тільки для передачі інформації між оточенням та підпрограмою. В описі підпрограми присутні формальніпараметри, які створюються в момент виклику підпрограми. При виклику з головної програми у назві підпрограми перераховуються фактичні параметри, які повинні мати значення. Ці значення передаються формальнимпараметрам
Локальні ж об’єкти є тимчасовими ресурсами, необхідними для виконання під програмної капсули і є цілком схованими в середині підпрограми. Локальні об’єкти – це здебільшого проміжні змінні, необхідні для розв’язання під задачі, що ставиться перед підпрограмною капсулою. По завершенню роботи підпрограми локальні об’єкти знищуються.
У зв’язку з наявністю глобальних та локальних об’єктів, оболонка капсули є блоком і діє як мембрана, пропускаючи в себе глобальні об’єкти і не випускаючи локальних. Цей ефект в програмуванні носить назву мембранного ефекту. Але правило хорошого стилю програмування забороняє використання глобальних об’єктів в підпрограмі (для передачі значень в підпрограму використовуються параметри, а для повернення значень з підпрограми в головну програму – використовують команду return. Це робить підпрограму універсальною).
3. Шаблони функцій
#include<iostream.h>
#include<conio.h>
template <class My_type> //Оголошення
void sorting(My_type &,My_type &,My_type &); //шаблону
void main()
{
clrscr();
int k;
cout<<"Введ. 1 для впорядкування чисел, 0 - символiв: ";
cin>>k;
if (k==1)
{
int nx,ny,nz;
cout<<"Три довiльнi цiлi числа: ";
cin>>nx>>ny>>nz;
sorting(nx,ny,nz); //створення екземпляра шаблону
cout<<"Цi числа в порядку зростання: "
<<nx<<" "<<ny<<" "<<nz<<endl;
}
if (k==0)
{
char nx,ny,nz;
cout<<"Три довiльнi символи: ";
cin>>nx>>ny>>nz;
sorting(nx,ny,nz); //створення екземпляра шаблону
cout<<"Цi символи в порядку зростання: "
<<nx<<" "<<ny<<" "<<nz<<endl;
}
getch();
}
//Опис шаблону
//--------------------------------------------------------------
template <class My_type>
void sorting(My_type &a,My_type &b,My_type &c)
{
My_type t;
if (a > b) {t = a; a = b; b = t;}
if (b > c) {t = b; b = c; c = t;}
if (a > b) {t = a; a = b; b = t;}
}
Шаблон функції – це опис функції, яка залежить від даних довільного типу. Під час виклику такої функції компілятор автоматично проаналізує тип фактичних аргументів, згенерує для них програмний код. Це називається неявним створенням екземпляра шаблона.
Запис:
template <class My_type>
void sorting(My_type &,My_type &,My_type &);
це оголошення шаблону.
My_type – назва деякого узагальнюючого типу.
У списку формальних параметрів можуть бути присутні лише параметри узагальнюючих типів.
Якщо шаблон описаний перед головною програмою, то він, як і звичайна функція, оголошення не потребує.
Підхід у програмуванні, що грунтується на використанні шаблонів функцій називається узагальнюючим програмуванням.
Тема. Структури в мові С++. Встановлення структурного шаблону. Визначення і ініціалізація структур.
План.
1. Встановлення структурного шаблону.
2. Визначення структур та структурних змінних.
3. Ініціалізація структури.
4. Доступ до елементів структур
Дата добавления: 2015-08-26; просмотров: 605;