65882

Вбудовані функції

Лекция

Информатика, кибернетика и программирование

Перед тим, як продовжити засвоєння механізмів роботи з класами, дамо невелике, але важливе пояснення. Воно не належить конкретно до об'єктно-орієнтованого програмування, але є дуже корисним засобом мови програмування C++, яке достатньо часто використовують у визначеннях класів.

Украинкский

2014-08-09

49.5 KB

1 чел.

Лекція № 3

Тема: Вбудовані функції

План:

  1.  Inline функції
  2.  Використання вбудованих функцій у визначенні класу.

 

  1.  Inline функції

     Перед тим, як продовжити засвоєння механізмів роботи з класами, дамо невелике, але важливе пояснення. Воно не належить конкретно до об'єктно-орієнтованого програмування, але є дуже корисним засобом мови програмування 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.  Використання вбудованих функцій у визначенні класу.

      Існує ще один механізм реалізації вбудованої функції. Він полягає у визначенні коду програми для функції-члена класу в самому оголошенні класу. Будь-яка функція, що визна-чається в оголошенні класу, автоматично стає вбудованою. У цьому випадку непотрібно передувати її оголошенню ключовим словом inline.

      Наприклад, наведену вище програму можна переписати у такому вигляді.

Код програми. Демонстрація механізму використання вбудованих функцій у                                                                               визначенні класу

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

class myClass

{

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

      public:

                  // Автоматично вбудовані функції

                  int Put() { return c; }

                  void Get(int d) { c = d; }

};

int main()

{

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

       Obj.Get(10);

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

       getch(); return 0;

}

      У цьому коді програми функції Put() і Get() визначені всередині оголошення класу myClass, тобто вони автоматично є вбудованими.

      Зверніть увагу на те, як виглядають коди функцій, визначених усередині класу myClass. Для невеликих за обсягом функцій таке представлення коду програми відображає звичайний стиль форматування програм мовою C++. Проте ці функції можна відформатувати ще й так:

           // Альтернативний запис вбудованих функцій у визначенні класу

class myClass

{

                  int c;

      public:

                  // Вбудовані функції

                  int Put()

                           { 

                                   return c;

                           }

                  void Get(int d)

                           {

                                   c = d;

                            }

};

     У загальному випадку невеликі функції (які подано у наведеному вище прик-

ладі) визначаються в оголошенні класу.


 

А также другие работы, которые могут Вас заинтересовать

83019. Дослідження поняття та видів джерел Фінансового права України 117 KB
  Таким чином під джерелами фінансового права України розуміється зовнішня форма виразу фінансовоправових норм які видає держава її органи та органи місцевого самоврядування або органи що визнані державою і представляють фінансові інтереси суспільства чи окремих категорій громадян.
83020. Аналіз «Кримських сонетів» у творчості А.Міцкевича 77.76 KB
  Хто хоч один раз побував у Криму той уже ніколи не забуде казкової принадності його узбережжя оповитого духмяністю темнозелених кипарисів залитого сонячним сміхом. У Криму оформилася так звана кіммерійська школа живопису представники якого створювали романтичні причорноморські пейзажі Киммерия ...
83021. Господарсько-правовий статус інвестиційних фондів в Україні 74.88 KB
  Метою роботи є визначення поняття та видів інститутів спільного інвестування аналіз правового режиму та особливостей їх господарської діяльності а також виявлення недоліків та розробка основних напрямків вдосконалення діяльності інвестиційних фондів та інвестиційних компаній на ринку цінних паперів.
83022. Кадастрове забезпечення формування об’єктів земельної власності 260.5 KB
  Земельний кадастр це методологічно облаштований реєстр даних по земельні ділянки в межах окремої території або країни в цілому який базується на зйомках меж. Згідно із Законом України Про Державний земельний кадастр державний земельний кадастр - це єдина державна геоінформаційна система...
83023. Розробка системи автоматизованого керування процесу прання пральної машини-автомат 812 KB
  Пройшло багато часу і сучасні пральні машини зовсім не схожі на ті, які були сто років тому. У автоматичних пральних машинах, що представляють сьогодні майже весь асортимент машин, наявний на ринку, усі операції з прання виконуються автоматично відповідно з численними циклами.
83024. Бухгалтерський баланс 81.77 KB
  Метою практичної частина курсової роботи є закріплення теоретичних знань при заповненні вступного балансу, складанні бухгалтерських проводок, відкриття рахунків синтетичного і аналітичного обліку, складанні оборотної відомості, а також складанні заключного балансу з використання типової форми бухгалтерської звітності.
83025. Розробка конструкції моделі жіночого демісезонного пальто та її модифікай 459 KB
  Визначення вихідних для проектування нової моделі одягу. Огляд тенденцій моди по заданому асортименту одягу. Найбільшої сили естетичне виховання досягає лише тоді коли увесь предметний світ оточуючий людину буде пронизаний красою гармонією коли культура в поведінці і одягу стане нормою.
83026. РОЗРОБКА ОПТИМАЛЬНОГО СТРАТЕГІЧНОГО ВИКОРИСТАННЯ ЛЮДСЬКОГО ПЕРСОНАЛУ 458 KB
  Провідна роль високоякісної робочої сили у забезпеченні перспектив розвитку вітчизняних підприємств обумовлює обєктивну необхідність постійного зростання кваліфікаційного рівня персоналу що відбувається шляхом безперервного розвитку працівників.
83027. Аналізом собівартості продукції 364.5 KB
  Добре відомо що покупця в першу чергу цікавить якість продукції і її ціна. Резерви поліпшення цих показників якраз і поміщені в собівартості продукції. В узагальненому вигляді собівартість продукції відображає всі сторони господарської діяльності підприємств їх досягнення і недоліки.