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

Лекция №5 Данные-элементы, статические данные, константные данные

Читайте также:
  1. Quot;Мягкие" и "твердые" данные.
  2. Аэростатические направляющие.
  3. Вопрос 22 - Исходные данные для проектирования тп и определение типа производства по значению коэффициента закрепления операции.
  4. Вставьте подходящие по смыслу предлоги. Употребите существительные, данные в скобках, в правильном падеже.
  5. Вставьте подходящие по смыслу предлоги. Употребите существительные, данные в скобках, в правильном падеже.
  6. Входные данные.
  7. Входные и выходные данные

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

Единственную копию данных необходимо иметь, на­пример, если в классе имеются некоторые константы, одинаковые для всех объек­тов класса. В этом случае нерационально хранить в каждом объекте собственные копии этих констант. Рациональнее иметь единственные экземпляры этих констант для всех объектов (например значения физических констант).

Для введения в класс подобных данных используются статические данные, которые содержат информацию «для всего класса». Объявление статических эле­ментов в классе начинается с ключевого слова static. Например:

static int D;

Статические элементы могут быть открытыми, закрытыми или защищенны­ми. Доступ к открытым статическим элементам класса возможен по­средством любого объекта класса или посредством имени класса с помощью бинар­ной операции разрешения области действия. Например:

MyClass::D = 10;

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

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

MyClass::GetD();

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

int MyClass::D = 0;

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

Приведем пример, демонстрирующий все сказанное относительно статических данных-элементов:

 

class MyClass

{

public:

static int D;

static int GetDl(void);

private:

static int Dl;

};

int MyClass::GetDl(void) {return Dl;}

int MyClass::D = 0;

int MyClass::Dl = 1;

 

В этом примере имеются два статических элемента данных: открытый D и за­крытый D1. Если пользователь должен иметь возможность получать значение за­крытой статической переменной D1, то должна быть предусмотрена функция ее чтения, названная в примере GetDl. Она должна быть объявлена открытой (public) и статической (со спецификатором static). Статической может быть объяв­лена любая функция, работающая только со статическими данными.

После объявления класса в примере расположена реализация функции GetDl. В реализации не требуется указывать спецификатор static. Далее приведены операторы, инициирующие открытые и закрытые статические данные. В дальнейшем можно из любой внешней функции обращаться к ним с помо­щью операции разрешения области действия. Например:

i=MyClass::D;

j=MyClass::GetDl();

Использование статических членов класса может заметно снизить потребность в глобальных переменных, применение которых нежелательно в принципе.

 

Среди данных — элементов могут быть объявлены именованные константы (их значение не может изменяться после инициализации). Например:

 

static const int MaxA = 10;

const int MinA;

 

Значения статических именованных констант могут задаваться в момент их объявления в классе.

Инициализация неста­тических констант — вопрос более сложный, связанный с построением конструк­торов.

Например, в объявлении класса была константа

const int A;

то конструктор дополняется инициализатором элементов

 

MyClass::MyClass():A(10)

{

//тело конструктора

}

Задаст значение А равным 10 при создании объекта.

 

Для изменения нестатической константы при создании объекта необходимо использовать конструктор с параметрами

 

MyClass::MyClass(int i):A(i)

{

//тело конструктора

}


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


Читайте в этой же книге: Средства реализации программного кода | Лекция 2. История развития ООП и сред RAD | Отличия ООП от процедурных программ | Встраиваемые функции inline | Виртуальные функции. | Первый пример |
<== предыдущая страница | следующая страница ==>
Пример для освежения в памяти| Функции-элементы, дружественные функции, константные функции

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