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;

                            }

};

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

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


 

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

32859. РУССКАЯ ФИЛОСОФИЯ: КИРЕЕВСКИЙ, ХОМЯКОВ, ГЕРЦЕН, ЧЕРНЫШЕВСКИЙ, ЛЕОНТЬЕВ, ДАНИЛЕВСКИЙ, ЛЕНИН, ФЛОРЕНСКИЙ 45.31 KB
  Ее феноменальность заключается в том что русская философия развивалась исключительно автономно самостоятельно независимо от европейской и мировой философии не находилась под влиянием многочисленных философских направлений Запада эмпиризма рационализма идеализма и др. Характерными чертами русской философии являются: сильная подверженность религиозному влиянию особенно православию и язычеству; специфическая форма выражения философских мыслей художественное творчество литературная критика публицистика искусство эзопов язык что...
32860. МАТЕРИАЛИЗМ И ИДЕАЛИЗМ. АГНОСТИЦИЗМ. МАТЕРИЯ И ДВИЖЕНИЕ. ИЗМЕНЕНИЕ И ПОКОЙ. (ОПРЕДЕЛЕНИЯ.) ФОРМАЛЬНАЯ ЛОГИКА. ДИАЛЕКТИКА И МЕТАФИЗИКА 35.77 KB
  В истории философии М. появляются вместе с возникновением философии в рабовладельческих обвах древн. Выступая в качестве идеологов прогрессивной в то время буржуазии материалисты вели борьбу со средневековой схоластикой и церковными авторитетами обращались к опыту как учителю и к природе как объекту философии. этой эпохи было стремление к анализу к разделению природы на более или менее обособленные не связанные друг с другом области и объекты исследования и рассмотрение их вне развития среди представителей материалистической философии...
32861. ПРОБЛЕМА ПОЗНАНИЯ. СТУПЕНИ ПОЗНАНИЯ: ЧУВСТВЕННОЕ И РАЦИОНАЛЬНОЕ, ЭМПИРИЧЕСКОЕ И ТЕОРЕТИЧЕСКОЕ. СЕНСУАЛИЗМ И РАЦИОНАЛИЗМ. ПРОБЛЕМА ИСТИНЫ. АГНОСТИЦИЗМ 23.5 KB
  ПРОБЛЕМА ИСТИНЫ. Таким образом лишь в единстве чувственного отражения и рационального познания эмпирического и теоретического познания реальный путь к постижению истины. Проблема истины в познании Следующая важнейшая проблема в познании это проблема истины. Такое понимание истины было продолжено и материалистами Нового времени.
32862. СОЗНАНИЕ И ЧЕЛОВЕК. ГИЛОЗОИЗМ, ПАНПСИХИЗМ. РЕДУКЦИОНИЗМ, ФИЗИКАЛИЗМ, МЕХАНИЦИЗМ 23.23 KB
  Проблема сознания в философии Признание в материализме материи в качестве субстанции сразу же ставит проблему объяснения сознания его происхождения и сущности. Но в дальнейшем было осознано качественное отличие явлений сознания от материальных вещей. Это отличие состоит в невещественности идеальности сознания. Как же решается проблема сознания Уже в древности существовало представление о самостоятельном существовании души.
32863. ГЕОГРАФИЧЕСКАЯ СРЕДА В РАЗВИТИИ ОБЩЕСТВА. ГЕОГРАФИЧЕСКОЕ НАПРАВЛЕНИЕ В ОБЩЕСТВОВЕДЕНИИ 48.5 KB
  Это положение правильно до возникновения экологического кризиса: в нем противопоставление природы и общества превращающее общественный организм только в социальный. Биосфера это часть природы оболочка Земли в которую входят живые организмы жизнь и неживое вещество преобразуемое потребляемое и охватываемое жизнью. Географическая среда обществ это часть природы с которой данное общество взаимодействует. Единство и борьба природы и человечества сопровождается с одной стороны воздействием природы на общество а с другой стороны ...
32864. МАТЕРИАЛЬНОЕ ПРОИЗВОДСТВО. ТРУД. ПРОИЗВОДИТЕЛЬНЫЕ СИЛЫ. ТЕХНОЛОГИЧЕСКИЙ СПОСОБ ТРУДА. ТЕХНОЛОГИЧЕСКОЕ НАПРАВЛЕНИЕ В ОБЩЕСТВОВЕДЕНИИ 81 KB
  Ключевым при изучении экономической жизни общества является анализ материального производства ибо общество не может существовать без производства необходимых для жизни людей материальных благ. Говоря о материальном производстве необходимо учитывать следующие моменты: Нередко в философской и экономической литературе понятие материального производства отождествляется с понятием общественного производства. Поскольку материальное производство является не только важнейшей но и определяющей сферой совокупного общественного производства то в...
32865. ПРОИЗВОДСТВЕННЫЕ ОТНОШЕНИЯ. СОЦИАЛЬНАЯ ЗАКОНОМЕРНОСТЬ. ФАТАЛИЗМ И ВОЛЮНТАРИЗМ 51.5 KB
  ПРОИЗВОДСТВЕННЫЕ ОТНОШЕНИЯ. Производственные отношения совокупность материальных экономических отношений между людьми в процессе общественного производства и движения общественного продукта от производства до потребления. Производственные отношения являются необходимой стороной общественного производства. В производстве люди вступают в отношения не только к природе.
32866. ОБЩЕСТВЕННО-ЭКОНОМИЧЕСКАЯ ФОРМАЦИЯ И ЦИВИЛИЗАЦИЯ 46.5 KB
  Такое понимание цивилизации мы встречаем у Л. В этом смысле говорят об античной цивилизации цивилизации инков и т. Для того чтобы определиться с понятием цивилизации необходимо очевидно предварительно проанализировать ее наиболее существенные черты. Разумеется речь идет не об инфраструктуре свойственной современной волне цивилизации но к концу варварства прыжок от родоплеменной изолированности уже был совершен.
32867. СОЦИАЛЬНАЯ СТРУКТУРА. КЛАССЫ И КЛАССОВАЯ БОРЬБА. ИНТЕЛЛИГЕНЦИЯ 58.5 KB
  Есть два различных подхода к определению интеллигенции. Но есть и иной подход наиболее популярный в русской социальной философии согласно которому к интеллигенции причисляют тех кого можно считать нравственным эталоном общества. Предпосылкой появления Интеллигенции в её первичных формах было отделение умственного труда от физического когда рядом с огромным большинством занятым исключительно физической работой образовались социальные группы освобожденные от прямого производительного труда и руководящие общественными делами в том числе...