Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Встраиваемые (inline-) функции

Читайте также:
  1. III Непрерывность дифференцируемой функции
  2. III. Функции Бюро контрольных работ
  3. IV. Основные функции участников
  4. Автокорреляционная функция ЛЧМ-сигнала. Сечения функции неопределенности ЛЧМ-сигнала. Выбор класса зондирующих сигналов для РЛС.
  5. Асимптоты графика функции
  6. Аспекты структуры типа ИМ (функции)
  7. Б. Регенерация нервных волокон как фактор, способствующий восстановлению нарушенной функции.

Размещая функции внутри класса, вы тем самым объявляете их встроенными {inline). Если вы создаете встроенные функции класса этим способом, C++ дублирует функцию для каждого создаваемого объекта этого класса, помещая встроенный код при каждой ссылке на метод (функцию) класса. Преимущество такого встроенного кода состоит в увеличении производительности. Недостатком является очень быстрое увеличение объема самого определения класса. Кроме того, включение кода функции в определение класса может существенно запугать класс, делая его элементы трудными для восприятия.

 

Для улучшения читаемости определений ваших классов вы можете вынести функции из определения класса, как вы обычно и делаете, и разместить ключевое слово inline перед определением функции. Например, следующее определение заставляет компилятор использовать встроенные операторы для функции show_employee:

 

inline void employee::show_employee(void)

 

{

cout << "Имя: " << name << endl;

cout << "Должность: " << position << endl;

cout << "Оклад: $" << salary << endl;

}

Статические члены класса

 

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

 

Если статический член имеет доступ public, то его также можно использовать в программе с помощью квалифицированного имени, как и обычным образом, с помощью уточненного имени.

Следующий пример показывает простой класс с единственной статической переменной:

class StaticDemo

{

static int x = 0;

StaticDemo()

{

x++;

}

}

Константные объекты и константные функции-члены класса. Ключевое СЛОВО mutable. Использование указателей на функции-члены класса. Массивы объектов класса. Дружественные функции и друзья класса. Использование дружественных функций для доступа к частным переменным класса.

 

Константные объекты и константные функции-члены

 

Если создать представитель класса с модификатором const, то компилятор будет проинформирован, что содержимое объекта не должно изменяться после инициализации. Чтобы предотвратить изменение значений элементов константного объекта, компилятор генерирует сообщение об ошибке, если объект используется с неконстантной функцией-элементом.

Константная функция-элемент, объявляемая с ключевым словом const после списка параметров, должна удовлетворять следующим правилам:

• она не может изменять значение элементов данных класса;

• не может вызывать неконстантные функции-элементы класса;

• может вызываться как для константных, так и неконстантных объектов класса.

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

Пример исп-ния константной функции-члена:

class X

{ private:

int n;

public:

int f() const;}; int X::f() const { return n++; }

Обычно константные объекты создают для того, чтобы получить гарантии того, что данные объекта невозможно будет изменить. Однако иногда случаются ситуации, когда вы хотите создать объект-константу, имеющий определенное поле, которое нужно будет изменять, несмотря на то, что сам объект является константой. Для этих целей необходимо соответствующее поле объявить со спецификатором mutable. Например, объявив в предыдущем примере поля iX, iY следующим образом:

mutable int iX, iY;

 


Дата добавления: 2015-12-08; просмотров: 76 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.007 сек.)