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;

                            }

};

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

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


 

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

41948. Створення діаграми дій 175.84 KB
  Вивчення призначення методів побудови елементів діаграми дій. Хід роботи Створити на діаграмі дії переходи точку прийняттярішення контролючийперехід Привести линіїдіаграми до ортогональноговигляду.
41949. Изучение характеристик и определение параметров тиристоров 450.47 KB
  Вольтамперная характеристика: а динистора б тринистора В отличие от динистора имеющего фиксированное напряжение включения у триодного тиристора Uвкл можно уменьшать увеличивая ток IУ тем самым управлять моментом его включения. Рисунок 3 Тринистор выключаемый Недостатком такого выключения является большое значение обратного тока управляющего электрода которое приближается к значению коммутируемого тока тиристора. Отношение амплитуды тиристора к амплитуде импульса выключающего тока управляющего электрода называется...
41950. Створення основної діаграми класів 185.98 KB
  Створити основну діаграму класів рис. Створити приклад основної діаграми пакета Курсы рис.13 та приклад діаграмикласів принадлежащих различным пакетам рис.
41951. Відображення атрибутів та операцій класів, наслідування и агрегування на діаграмах класів 192.04 KB
  Создать диаграмму классов пакета Курсы и включить классы ПредложениеКурса Курс КонтрольПредложенияКурса в диаграмму классов. Обеспечить отображение всех атрибутов и операций на диаграмме классов. Создать диаграмму иерархии наследования классов Профессор и Студент. Переместить атрибуты по иерархии наследования классов и получить дерево наследования.
41952. ИССЛЕДОВАНИЕ ДИНАМИКИ СИСТЕМ АВТОМАТИЧЕСКОГО УПРАВЛЕНИЯ С ПРИМЕНЕНИЕМ ПАКЕТА MATLAB 83 KB
  Схема набора объекта управления. Исследование системы управления. Схема системы управления модели. выбранные коэффициенты усиления и времени интегрирования по каналу управления Ти=500 и К=0,04 приводят к устойчивой работы системы.
41953. Требования безопасности. Общие требования безопасности 1.59 MB
  Костромской государственный технологический университет 2011 Цель работы: приобретение навыков самостоятельных действий и поведения студентов направленных на сохранение жизни каждого пострадавшего до прибытия спасательных служб использование любого шанса для его спасения. Первую медицинскую помощь необходимо оказывать до прибытия медицинского персонала или до появления признаков жизни у пострадавшего или до появления признаков наступления биологической смерти трупных пятен окоченения. Наиболее эффективным способом искусственного...
41954. Социальная структура общества. Понятие и виды социальных групп 16.25 KB
  Социальная структура общества – это определенная форма устойчивых связей и отношений, обусловливающих создание социальных групп и институтов. Можно сказать, что социальная структура формирует стабильность и устойчивость общества. Согласно одному из множества определений, социальная структура представляет собой устойчивую связь элементов в социальной системе.