Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Приклад

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. Доступ до елементів структур


Читайте також:

  1. I. Культура учебного труда как теоретическая и прикладная проблема педагогической психологии
  2. Абсолютні синоніми (наприклад, власне мовні й запозичені) в одному тексті ділового стилю вживати не рекомендується.
  3. Алгоритм однофакторного дисперсійного аналізу за Фішером. Приклад
  4. Аналіз структури та динаміки необоротних активів за даними Ф№1 «Баланс» (на прикладі ВАТ «Горизонт»)
  5. Ассиметричное прикладывание: руководство пользователя
  6. Базові та прикладні класифікації
  7. В процесі читання виділіть маркером або підкресліть приклади дії променів на живі організми.
  8. В чому полягає явище тунелювання через потенціальний бар’єр, наведіть приклади.
  9. Визначення і приклади
  10. Вільсон О. Г. Охорона праці в галузі (на прикладі будівництва). Навчальний посібник. – К.: «Основа». 2006. – 204 с.
  11. Возникновение прикладной психологии, 1892-1919
  12. ВПРАВА 11. Ознайомтеся з фрагментами наукових текстів, знайдіть приклади для характеристики синтаксичних особливостей викладу інформації українською мовою.




Переглядів: 626

<== попередня сторінка | наступна сторінка ==>
Int a() | Встановлення структурного шаблону.

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.006 сек.