
Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Топ:
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Оснащения врачебно-сестринской бригады.
Методика измерений сопротивления растеканию тока анодного заземления: Анодный заземлитель (анод) – проводник, погруженный в электролитическую среду (грунт, раствор электролита) и подключенный к положительному...
Интересное:
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Национальное богатство страны и его составляющие: для оценки элементов национального богатства используются...
Дисциплины:
![]() |
![]() |
5.00
из
|
Заказать работу |
Содержание книги
Поиск на нашем сайте
|
|
Члены класса могут быть объявлены с модификатором static. Статический член класса может рассматриваться как глобальная переменная или функция, доступная только в пределах класса.
Данное-член класса, определенное с модификатором static, разделяется всеми представителями этого класса, так как существует только один экземпляр этой переменной. Память под статические данные-члены выделяется, даже если нет никаких представителей класса. Поэтому класс должен не только объявлять статические данные-члены, но и определять их.
Пример 5.
class Any
{
public:
Any ();
static int count;
};
int Any:: count =0;
К статическим данным-членам, объявленным в разделе public класса, рекомендуется обращаться с помощью следующей конструкции:
<имя_класса>::<данное_член>
Эта форма обращения отражает тот факт, что соответствующее данное-член является единственным для всего класса.
Если статические данные-члены объявлены как закрытые, то доступ к ним можно получить с помощью обычных функций-членов. Доступ к статическим данным-членам с помощью обычных функций-членов ничем не отличается от доступа к другим данным-членам, но для этого необходимо создать хотя бы один объект данного класса. В связи со сказанным выше, можно дать следующие рекомендации:
1. Применяйте статические данные-члены для совместного использования данных несколькими объектами класса;
2. Ограничьте доступ к статическим данным-членам, объявив их в разделе protected или private.
Пример 6.
Файл Dot.h
class Dot
{
static int count;// объявление статического данного-члена – счётчика объектов
char name;
int x, y;
public:
Dot (char Name) { name = Name; x =0; y =0; count ++;}
~ Dot () { count --;}
void PrintCount (); // функция выводит количество существующих объектов
};
Файл Dot.cpp
#include " Dot. h "
void Dot:: PrintCount ()
{
char S [30];
CharToOem ("В памяти существует ", S);
cout << S << count;
CharToOem (" объекта типа Dot\n", S);
cout << S;
}
Файл Main.cpp
#include " Dot. h "
int Dot:: count =0; // инициализация статического данного-члена
int main ()
{
Dot A ('A'), B ('B'), C ('C');
A. PrintCount ();
cout << Dot:: count <<'\n'; // ошибка: данное-член count недоступен
}
В этом примере статическое данное-член count содержит количество существующих объектов. Инициализация данного-члена count осуществляется перед выполнением программы и созданием объектов в файле основной программы с помощью оператора: void Dot:: PrintCount ()
Обратите внимание, что обращение к этому члену класса в функции main () в операторе cout << Dot:: count <<'\n'; приводит к ошибке, поскольку данное-член класса count объявлено как закрытое и является недоступным за пределами класса.
При выполнении программа выводит на экран:
В памяти существует 3 объекта типа Dot
Корректный учёт количества существующих объектов достигается двумя действиями: каждый конструктор, (в том числе и конструктор копирования) увеличивает счётчик на единицу, деструктор – уменьшает на единицу. Поскольку конструктор вызывается при создании каждого объекта, а деструктор – при уничтожении, то данное-член count будет содержать количество существующих объектов независимо от того каким образом и в какой области определения создан или уничтожен объект.
Статические функции-члены класса
Особенностью использования статических функций-членов является то, что они также определены в единственном экземпляре и не являются безраздельной собственностью какого-то представителя класса. В связи с этим им не передается указатель this. Эта особенность статических функций-членов используется при написании функций-обработчиков прерываний и callback -функций (при программировании для Windows).
Из сказанного выше вытекает несколько важных следствий:
1. статическая функция-член может вызываться независимо от того, существует или нет какой-либо представитель класса;
2. статическая функция-член может манипулировать только статическими данными-членами класса и вызывать только другие статические функции-члены класса;
3. статическая функция-член не может быть объявлена с модификатором virtual.
Пример 7.
Файл Dot.h
class Dot
{
int x, y;
static int count;
public:
Dot () { x =0; y =0; count ++;}
~ Dot () { count --;}
static int GetCount () { return count;}
void PrintCount ();
};
Файл Dot.cpp
#include " Dot. h "
void Dot:: PrintCount ()
{
char T [30];
CharToOem ("В памяти существует ", T);
cout << T << count;
CharToOem (" объекта типа Dot\n", T);
cout << T;
}
Файл Main.cpp
#include " Dot. h "
int Dot:: count =0; // инициализация статического данного-члена
int main ()
{
char S [25];
CharToOem ("Сейчас есть объектов: ", S);
cout <<S<< Dot:: GetCount ()<<'\n';
Dot A, B, C;
A. PrintCount ();
cout << Dot:: GetCount ()<<'\n';
}
|
|
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
© cyberpedia.su 2017-2025 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!