Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Объявление функции вне и внутри тела класса



При объявлении функции вне класса, внутри тела класса помещается только прототип или описание функции - заголовок функции с указанием типов формальных параметров, оканчивающийся знаком ‘; ‘.

Все экземпляры (объекты) класса будут использовать один код функции, и компилятор будет генерировать код для вызова функции при каждом обращении к функции.

Например класс имеет три метода (функции), определенных вне класса и сто экземпляров (объектов) класса, то в программе присутствуют 100 экземпляров данных, но коды только трех функций.

Данные тиражируются при создании объектов.

Компонентные функции не тиражируются.

При полном объявлении функции внутри класса функция по умолчанию считается подставляемой, т.е. при каждом вызове этих функций их код “встраивается“ в точку вызова. Это, так называемые, inline- функции, компилятор помещает в объектном коде тело функции везде, где есть к ней обращение.

Вместо команд передачи управления единственному экземпляру тела функции компилятор в каждое место вызова функции помещает команды кода операторов тела функции.

Это может увеличить скорость выполнения программы, но увеличивает также размер кода программы. Если метод (функция) большой по объему, не следует настраивать компилятор на генерацию встроенного кода и следует объявить функцию вне класса.

Функция, определенная вне класса, будь это функция – член класса или любая другая функция, также может быть подставляемой, если при ее определении используется модификатор inline:

inline int ff (void) {... } //- обычная функция

class Men { char * name;

void setName (char*); // -функция- член класса

};

inline void Men:: setName (char*n)

{ name = n;}

Удобно использовать inline - функцию, если функция маленькая, возрастает скорость выполнения программы, и не сильно возрастает размер кода программы при многократном встраивании в него кода операторов функции.

Ограничения и запреты для подставляемых функций (включая и компонентные):

1) встраиваемая функция слишком велика;

2) встраиваемая функция рекурсивная;

3) обращение к встраиваемой функции размещено до ее определения;

4) встраиваемая функция используется более одного раза в выражении;

5) встраиваемая функция содержит операторы for, while, do, switch, goto.

Статический компонент класса





Дата публикования: 2014-11-28; Прочитано: 362 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...