КАТЕГОРИИ: Архитектура-(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. Вусі, що знаходиться між тією, що відкриває і закриває фігурними дужками, вважається тілом функції.
Дата добавления: 2013-12-14; Просмотров: 7859; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |