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;

                            }

};

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

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


 

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

53369. Объемное моделирование и конструирование из бумаги. Игрушки из бумажных полосок 172.5 KB
  Игрушки из бумажных полосок Вид урока Урок беседа Тип урока Урок изучения нового материала Студенты преподаватели Айрапетова Мария Сергеевна Гусева Анна Павловна Ершова Дарья Дмитриевна Максимова Марина Вадимовна Государственный социальный заказ Во исполнение Закона Российской Федерации Об образовании. Добиваться: применения различных форм методов средств технологий при проведении образовательного урока; установления взаимодействия с различными субъектами образовательного процесса. Технологическая карта урока Триединые...
53370. Розвиток слухової уваги, слухової пам’яті та фонематичного сприймання у дітей дошкільного віку 68 KB
  Діти стають у коло непомітно для ведучого вони передають за спиною один одному дзвіночок. Логопед розрає дітям ведмедиків з зображенням цих предметів потім за ширмою озвучує ці предмети а діти повинні відгадати який ведмедик шумить. Дидактична гра Хто кличе Діти по черзі називають ім’я ведучого який стоїть до них спиною. Потім гра ускладнюється і діти кличуть ведучого: Ау то голосно то тихо в залежності від того що скаже логопед: Далеко пішли у ліс Близько пішли у ліс.
53371. Учет косвенных расходов в составе себестоимости продукции. Синтетический учёт движения нематериальных активов 22.77 KB
  Косвенные затраты — затраты, которые, в отличие от прямых затрат, не могут быть непосредственно отнесены на себестоимость одного конкретного вида продукции. Косвенные затраты относятся одновременно ко всем видам продукции и распределяются между ними условно: общепроизводственные и общехозяйственные расходы, часть расходов на продажу и др
53372. Дидактические игры как средство активизации учащихся при изучении таблицы умножения 52.5 KB
  Хочу рассказать о некоторых дидактических математических играх, которые я использую на уроках с целью активизации учащихся при формировании вычислительных навыков. Навык, как известно, приобретается в результате многократных повторений одних и тех же операций. Чтобы избежать однообразия в шлифовке табличных случаев умножения и деления, провожу упражнения в игровой, занимательной форме.
53373. Роль ігор-драматизацій в навчанні дошкільників англійської мови 97 KB
  Всі етапи роботи з казкою здійснюються разом з дітьми. Ініціативу розподілу ролей я надаю малечі (за бажанням), разом з тим, тактовно корегую їх вибір, адже дітям з низьким або середнім рівнем розвитку бажано надати роль, яка є невеличкою за обсягом, не дуже складною та не містить у собі тих мовних структур, які викликають труднощі у дитини (зокрема це стосується звуковимови), щоб не зникло бажання приймати участь у виставі.
53374. Использование деловых и ролевых игр на уроках химии для развития ключевых компетентностей учащихся 121.5 KB
  В процессе игры у детей вырабатывается привычка сосредоточиться мыслить самостоятельно развивает внимание стремление к знаниям. По спектру целевой ориентации игры подразделяются: дидактические: расширение кругозора познавательная деятельность; применение ЗУН в практической деятельности; формирование определенных умений и навыков необходимых в практической деятельности; развитие общеучебных умений и навыков; развитие трудовых навыков. В нее включаются последовательно игры и упражнения формирующие умение выделять основные характерные...
53375. Дидактическая игра – залог успешной деятельности учащихя на уроке 101 KB
  Игра помогает формированию фонематического восприятия слова обогащает ребенка новыми сведениями активирует мыслительную деятельность внимание а главное стимулирует речь. В каком глаголе слово нет слышится сто раз стонет В каком слове семь гласных семья Что принадлежит только тебе а употребляется другими чаще чем тобой имя Какое слово состоит из трёх одинаковых букв три – о Какая часть растения бывает и частью слова корень Какие буквы обозначают два звука если стоят в начале слова или после гласной ...
53376. Ігрові завдання на корекцію емоційної сфери дітей дошкільного віку 98.5 KB
  Психологічний етюд Хто що любить Діти приходять у лісове кафе. Психологічний етюд Клумба і садівник Діти обирають ролі квітів на клумбі. Психологічний етюд Слухаємо себе Ведучий звертається до дітей: Давайте сядемо зручніше розслабимося і заплющимо очі. Психологічний етюд Неслухняні ведмежата Ведмедики з'їли смачні але немиті яблука.
53377. Игры для детей к Библейским урокам 43 KB
  Во время этой игры дети могут увидеть что Божья любовь неотделима от нас также как и наша тень. Пока бутерброды теплые поговорить о том что нам тепло когда Божья любовь покрывает нас как расплавленный сыр покрывает хлеб.