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;

                            }

};

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

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


 

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

79904. ТУРНІР МОВОЗНАЙОК 47 KB
  Мова – це неоцінений божественний дар, який дано людині. Вона супроводжує нас від народження і аж до смерті. У щоденній практиці спілкування не обійтися без мови. навіть коли ми думаємо, в пам’яті відтворюємо відомі нам слова і фрази. Власні думки формулюємо і передаємо за допомогою мови...
79905. РЫЦАРСКИЙ ТУРНИР 377 KB
  На нашем турнире будут соревноваться самые благородные и достойные рыцари из каждого класса. Но кто же такие рыцари Ответы детей Рыцарь нем. Рыцари обычно имели на вооружении железный шлем с забралом кольчуги плечные ручные и ножные прикрытия обитые жестью перчатки острые мечи и копья.
79906. Рослини. Рослини і людина: вшанування рослин, охорона 117.5 KB
  Мета. Продовжувати розкривати цінності рослин для людини; ознайомити учнів з рослинами, які охороняються: конвалія, дзвоники, сон-трава тощо; формувати в учнів відчуття особистої відповідальності за збереження рослин; збудити інтерес до рослин-оберегів, народних звичаїв, традицій вшанування рослин в Україні.
79907. Толерантність. Позитивне значення толерантності у формуванні цілісної особистості молодої людини 77 KB
  Мета: показати певні рівні толерантної поведінки людини; розвивати адекватну самооцінку, вміння аналізувати, приймати рішення, вибирати правильну позицію; виховувати спостережливість, уважність до інших людей; виховувати здатність бачити і розуміти відмінність іншої людини від себе, вчити встановлювати...
79908. Наші права – щасливе дитинство 103.5 KB
  Ознайомити учнів з їхніми основними правами та обов’язками. Вчити відрізняти права від обов’язків закріпити їх в пам’яті учнів. Ілюстрований матеріал до теми плакати Знай свої права та обов’язки Права дітей Обов’язки учнів Світова книга прав дитини картки для групової роботи комп’ютер презентація...
79909. ГРА ДЛЯ ЕРУДИТІВ «РОЗУМНИКИ» 95 KB
  12 учасників Записати відгадки до загадок. На кожну відгадку 1 хвилина Перевірити і порахувати кількість правильних відповідей 6 учасників Кожен вибирає 1 тему, по якій отримує 6 питань. На відповіді відводиться 1 хвилина. Не знаючи відповіді на дане питання, учасник має право просити наступне.
79910. Козацькі розваги 47.5 KB
  Добрий день вам, друзі щирі! Хай живеться вам у мирі. Не минайте нашу хату, Бо у нас сьогодні свято. Сьогодні, гадаєм, якраз буде вчасно, Щоб був у вас дійсно чудовий настрій, Упоравшись з ділом, хіба вам не варто Зустрітися з силою, піснею, жартом.
79911. Козацькі розваги. Свято 59 KB
  Хай буде доля на все роздолля А до того – літ пребагато На добро і згоду Хай не буде переводу козацькому роду Козаки були вільні і безстрашні люди. Часом козаки віддавали перевагу смерті ніж ганебному рабству.
79912. Розваги вдома 144.5 KB
  Сьогодні ми познайомимось з тим як можна розважатися вдома чим можна гратися а від чого треба знаходитися подалі. Всі ці знання вам необхідні для того щоб ігри і розваги вдома приносили лише радість задоволення а не були причиною травм пожеж і біди.