Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_05_INLINE_STATIC_CONST.doc
Скачиваний:
2
Добавлен:
13.11.2019
Размер:
69.63 Кб
Скачать

В памяти существует 3 объекта типа Dot

Корректный учёт количества существующих объектов достигается двумя действиями: каждый конструктор, (в том числе и конструктор копирования) увеличивает счётчик на единицу, деструктор – уменьшает на единицу. Поскольку конструктор вызывается при создании каждого объекта, а деструктор – при уничтожении, то данное-член count будет содержать количество существующих объектов независимо от того каким образом и в какой области определения создан или уничтожен объект.

Статические функции-члены класса

Особенностью использования статических функций-членов является то, что они также определены в единственном экземпляре и не являются безраздельной собственностью какого-то представителя класса. В связи с этим им не передается указатель this. Эта особенность статических функций-членов используется при написании функций-обработчиков прерываний и callback-функций (при программировании для Windows).

Из сказанного выше вытекает несколько важных следствий:

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

  2. статическая функция-член может манипулировать только статическими данными-членами класса и вызывать только другие статические функции-члены класса;

  3. статическая функция-член не может быть объявлена с модификатором virtual.

Константные данные-члены класса

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

class Dot // класс точки

{

const char name; // имя точки – константное данное-член

double x, y; // координаты точки

public: // открытые члены класса

Dot(char Name, double X, double Y): name(Name), x(X), y(Y) {}

Dot(char Name): name(Name), x(0), y(0) {}

};

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

Функция-член класса может быть объявлена с модификатором const, который следует за списком параметров. Такая функция не может изменять значение данных-членов класса и не может вызывать не константные функции-члены класса. Приведем пример объявления константной функции-члена класса:

class Coord // базовый класс координат

{

double x, y; // координаты

public: // открытые члены класса

Coord() {x=0; y=0;} // инициализирует координаты нулями

double GetX() const {return x;}// константная функция возвращает координату x

double GetY() const {return y;}// константная функция возвращает координату y

void SetX(double X) {x=X;} // передаёт заданное значение в координату x

void SetY(double Y) {y=Y;} // передаёт заданное значение в координату y

};

Константные объекты

Можно также создавать константные объекты. Для этого их объявления предваряют модификатором const. Например,

const Coord A(3, 5);

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

5