Статические члены класса. Особенности выделения памяти и инициализации.


static – указание на то, что переменная будет хранить значение, общее для всех экземпляров класса (глобализация с учетом инкапсуляции и видимости). При объявлении static переменной-члена класса создается единственный общий экземпляр переменной, который будет использоваться всеми экземплярами данного класса. Static переменная инициализируется нулем до создания первого экземпляра класса. Физическая память для static переменной-члена класса выделяется только при ее глобальном определении вне данного класса. Используется для замены глобальных переменных в рамках принципа инкапсуляции.

 

static функция получает прямой доступ к другим статическим членам класса. Использование статических функций в основном ограничено предварительной инициализацией закрытых статических переменных-членов до создания реальных объектов класса.

 

Ограничения:

· Не имеет указателя this

· Не может быть одновременно версий статической и нестатической функции

· Не может быть виртуальной

· Нельзя объявлять используя const и volatile

 

class example

{

static int a;

public:

static void setA (int A) { a = A; }

int getA () { return a; }

};

 

int example::a;

 

void main()

{

example object;

example::setA(10);

cout << object.getA() << endl;

}

Константные переменные-члены класса. Особая инициализация переменных-членов класса. Функции-члены с атрибутами const.

const – указание на неизменность значения (задание константы). Установка значения такого блока данных производится только один раз.

Для функции const запрещает функции модифицировать вызывающий ее объект (при этом this и остальные неявные параметры считаются константными, однако, атрибут mutable разрешает модификацию помеченной переменной).

 

Особая инициализация членов класса:

 

конструктор (список_параметров) : данное (значение)

данное1 (значение1)

данноеN (значениеN)

{…}

 

Особенности:

· Члены класса создаются и инициализируются в порядке своего объявления в классе, а не в порядке списка

· Значения, присваемые данным могут быть константными или значениями из списка параметров коструктора

· Инициализация членов класса и вызов базовых конструкторов может смешиваться в одном списке.

 

class example

{

int a;

int mutable b;

public:

// void setA (int A) const { a = A; }

// не проходит т.к. нельзя модифицировать

void setB (int B) const { b = B; }

int getA () const { return a; }

int getB () const { return b; }

};




Дата добавления: 2022-02-05; просмотров: 255;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.009 сек.