Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Поняття про вбудовані функції

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

Наприклад, щоби створити вбудовану функцію Fun(), яка повертає int -значення і не приймає жодного параметра, достатньо оголосити її так:

inline int Fun()

{

//...

}

Модифікатор inline повинний передувати усім решта настанов оголошення самої функції.

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

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

Продемонструємо механізм використання вбудованої функції на прикладі такої програми.

Демонстрація механізму використання вбудованої функції

##include <vcl>

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

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

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

class myClass { // Оголошення класового типу

int c; // Закритий член за замовчуванням

public:

int Put();

void Get(int d);

};

inline int myClass::Put()

{

return c;

}

inline void myClass::Get(int d)

{

c = d;

}

int main()

{

myClass Obj; // Створення об' єкта класу

Obj.Get(10);

cout << "c= " << Obj.Put() << endl;

getch(); return 0;

}

У цьому коді програми замість виклику функцій Put() і Get() підставляють їх код. Так, у функції main() рядок

Obj.Get(10);

функціонально еквівалентний такій настанові присвоєння:

Obj.c = 10;

Оскільки змінна c за замовчуванням закрита у межах класу myClass, то цей рядок не може реально існувати в коді функції main(), але за рахунок вбудованої функції Get() досягнуте того ж результату, одночасно позбавившись витрат системних ресурсів, взаємопов 'язаних з викликом функції.

Важливо розуміти, що насправді використання модифікатора inline є запитому, а не командою, за якою компілятор згенерує вбудований (inline -) код. Існують різні ситуації, які можуть не дати змоги компіляторові задовольнити наш запитий. Вісь декілька прикладів:

● деякі компілятори не генерують вбудованого коду, якщо відповідна функція містить цикл, конструкцію switch або настанову goto;

● найчастіше вбудованими не можуть бути рекурсивні функції;

● як правило, механізм вбудовування "не проходити" для функцій, які містять статичні (static) змінні.

Лістинг 1. Демонстрація частин програми C++ на прикладі програми HELLO. CPP

1: #include <iostream.h>

2:

3: int main()

4: {

5: cout << "Hello World!\n";

6: return 0;

7: }

Результат: Hello World!

Основний код програми починається в рядку 3 з виклику функції main(). Кожна програма на мові C++ містить функцію main(). Функція - це блок програми, який виконує одне або декілька дій. Зазвичай функції викликаються іншими функціями, але main() - особлива функція: вона викликається автоматичний при запуску програми.

Функція main(), подібно до усіх інших функцій, повинна оголосити тип повертаного значення. У програмі HELLO.CPP функція main() повертає значення типу int (від слова integer - цілий), а це означає, що після закінчення роботи ця функція поверне операційній системі цілочисельне значення. У даному випадку буде повернено ціле значення 0, як показано в рядку 6. Повернення значення в операційну систему не таке важливе, і загалом це значення самою системою ніяк не використовується, але стандарт мови C++ вимагає, щоб функція main() була оголошена за усіма правилами.

Деякі компілятори дозволяють оголосити функцію main() так, щоб вона повертала значення типу void. Цього більше не можна робити в C++, тому вам слід позбавлятися від старих звичок. Дозвольте функції main() повертати значення типу int і заради цього помістите в останньому рядку цієї функції вираження return 0;.

Примітка: В деяких операційних системах передбачена можливість перевірки значення, повертаного програмою. Зручно повертати значення 0 як прапор нормального завершення функції.

Усі функції починаються відкриваючою фігурною дужкою ({) і закінчуються закриваючою фігурною дужкою (}). Фігурні дужки функції main() помішані в рядках 4 і 7. Вусі, що знаходиться між тією, що відкриває і закриває фігурними дужками, вважається тілом функції.

 

 

<== предыдущая лекция | следующая лекция ==>
Структура програми, функція main без параметрів | Константи, змінні, вирази та пріоритет операцій
Поделиться с друзьями:


Дата добавления: 2013-12-14; Просмотров: 7859; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.