66912

Статичні члени класу та їх оголошення

Лекция

Информатика, кибернетика и программирование

Оголошуючи член-даних класу статичним, ми тим самим повідомляємо компілятор про те, що, незалежно від того, скільки обєктів цього класу буде створено, існує тільки одна копія цього static-члена. Іншими словами, static-член розділяється між всіма обєктами класу.

Украинкский

2015-01-12

48 KB

10 чел.

Лекція № 4

Тема: Статичні члени класу

    Члени класу (як функції, так і змінні) можуть бути статичними.

    Розглянемо статичні члени дані класу. Створення таких членів здійснюється за три етапи:

  •  оголошення;
  •  визначення;
  •  ініціалізацію.

   Оголошення статичного члена здійснюється в тілі класу за допомогою зарезервованого слова static в межах класу, а визначення (опис) – за його межами.

                        class myClass

                        {      

                               static int x;

                               …

                        };

                        int myClass::x;

   Оголошуючи член-даних класу статичним, ми тим самим повідомляємо компілятор про те, що, незалежно від того, скільки об'єктів цього класу буде створено,  існує тільки одна копія цього static-члена.  Іншими словами, static-член розділяється між всіма об'єктами класу. Всі  статичні  дані  під  час  першого  створення  об'єкта ініціалізуються нульовими значеннями, якщо перед цим не представлено інших значень ініціалізації.

   Під  час  оголошення  статичного  члена-даних  у  класі  програміст  не  повинен його визначати. Необхідно забезпечити його глобальне визначення поза цим класом. Це реалізується шляхом повторного оголошення цієї статичної змінної за допомогою оператора дозволу області видимості, який дає змогу ідентифікувати, до якого класу вона належить. Тільки у цьому випадку для цієї статичної змінної буде виділено пам'ять.

   Явна ініціалізація статичних членів даних може бути відсутньою. Допускається ініціалізація статичного члена на етапі визначення.

   Статичні члени можна визначати та ініціалізувати і у випадку, коли жоден об'єкт не створено.

   

Приклад 1

class myClass 

{      public:      // оголошення стат. член. даних

             static int x;  

             static int x1;

             static int x2;

};

int myClass::x;      //визначення стат. член. даних і неявне присвоєння їм нульових значень

int myClass::x2;    

int myClass::x1=1;   //визначення й явна ініціалізація стат. член.

void main ()

{      myClass::x=1;       //явна ініціалізація стат. член.

      myClass a,b;         //створення об'єктів класу myClass

      a.x++; b.x--;          //операції з стат. член. через об'єкт

      myClass::x++;       //операції з стат. член. через клас

      a.x1++;       //операції член. ініціалізованим при визначенні

      a.x2++;       //операції з неіціалізованим явно стат. член.

}

   

    Статичні члени даних можуть оголошуватись закритими. Ініціалізуються такі члени при визначенні. Пряме звертання до приватних статичних членів є забороненим. Для організації доступу до них використовують три основні методи:

  •  через функцію-член класу;
  •  через дружній клас чи дружню функцію;
  •  через визначення та ініціалізацію.

Приклад 2

class myClass 

{            static int n;

      public:

 void Set(int c) { n = c; }

 void Show() { cout << n << " "; }

};

int myClass::n;         // Визначаємо static-член n

int main()

{       myClass ObjA, ObjB;

        ObjA.Show(); // Виводиться 0

        ObjB.Show(); // Виводиться 0

        ObjA.Set(10); // Встановлюємо static-члена n дорівнює 10

        ObjA.Show(); // Виводиться 10

        ObjB.Show(); // Також виводиться 10

        getch();  return 0;

}

    Зверніть увагу на те, що статичний цілочисельний член n оголошений і у класі myClass,  і його визначено як глобальна змінна. Як було сказано вище, необхідність такого подвійного оголошення зумовлена тим, що під час оголошення члена n у класі myClass пам'ять для нього не виділяється. Компілятор C++  ініціалізував змінну n  значенням 0, оскільки ніякої  іншої  ініціалізації у програмі немає. Тому, внаслідок  двох  перших  викликів  функції  Show()  для  об'єктів  ObjA  і  ObjB  відображається значення 0. Потім об'єкт ObjA встановлює члену n значення, яке дорівнює 10, після чого об'єкти ObjA і ObjB знову виводять на екран його значення за допомогою  функції  Show().  Але  оскільки  існує  тільки  одна  копія  змінної  n,  що  розділяється об'єктами ObjA  і ObjB, то значення 10 буде виведено під час виклику фун-

кції Show() для обох об'єктів. 

    За допомогою статичної змінної можна також визначити кількість існуючих об'єктів конкретного класу. Розглянемо приклад.

Приклад 3

class myClass 

{             double a,b;

             static int n;

      public:

  myClass (double a1, double b1)

            {a=a1; b=b1; n++;}       // конструктор збільшує число обєктів

 ~ myClass ()

            {n --;}         // деструктор зменшує число обєктів

void print ()

           {cout<<”Oбєкт (”<<a<<”,”<<b<<”) Число обєктiв : “<<n<<endl; }

};

Int myClass:: n=0;

Int main()

{       myClass Obj1(1.1, 1.2);

       Obj1.print();              // Число обєктів - 1

       myClass*pObj2 = new myClass (2.1, 2.2);

       pObj2 -> print();      // Число обєктів - 2

       Obj1.print ();           // Число обєктів - 2

       delete pObj2;

       Obj1.print();           // Число обєктів - 2

       …

}

    Можна також оголосити статичною і функцію-члена класу. До статичної функції-члена класу можуть отримати доступ тільки інші static-члени цього класу. Статична функція-член не має показника  this. Створення віртуальних статичних функцій-членів класу не дозволяється. Окрім цього, їх не можна оголошувати з модифікаторами const або volatile. Статичну функцію-члена можна викликати для об'єкта її класу або незалежно від будь-якого об'єкта, а для  звернення до неї достатньо використовувати  ім'я класу  і оператор дозволу області видимості.


 

А также другие работы, которые могут Вас заинтересовать

33163. Зимняя смена, о/л «Энергия» 54 KB
  Так как север это очень красивое но в то же время и очень опасное место вы все должны уметь четко и быстро выполнять наши команды что бы не погибнуть Кольцовка что нужно взять в экспедицию на Северный полюс А теперь проверим все ли вы взяли ничего не забыли а может положили чтото лишнее Список экспедиции Проверим все ли в сборе и составим список экспедиции вот вам листы нужно написать свое имя и передать дальше Кольцовка виды передвижения по снегу Как вы думаете на чем нам придется добираться до...
33164. Авторские программы ПРОГРАММА «Тайна трех времен» 126 KB
  В деятельности мы определяем три основных компонента Времени – прошлое настоящее и будущее. Главной содержательной целью может быть признано создание пространства организованного для включения детей в самостоятельную жизнь удовлетворение каждым из них своих интересов привитие навыков организации своей деятельности и времени постижение самоценности собственной личности осознание своей роли в жизни. Цель: Создание условий для обогащения опыта самоорганизации жизнедеятельности подростка. Задачи: Выявление интересов и способностей...
33165. Вечер знакомств 79 KB
  Набор команды: Садко набирает дружину Царь с царицей подданных в свое царство Капитан Врунгель команду. Творческая ромашка: детей делят на две или три команды Желтые лепестки цирк клоуны гимнасты дрессировщики жонглеры Красные лепесткитеатр инсценировать сказки ситуации . Далее все делятся на две команды. Способы деления на команды: 1 Первому игроку на ухо говорится цвет например красный.
33166. ВОЖАТОМУ НА ЗАМЕТКУ 71.5 KB
  ЛЕНИВЫЙ ВОЖАТЫЙ Ведя детей то в одно место то в другое исходя из запланированного в дне по дороге указывает рукой в разные направления и говорит: А это дети вон чо. Ведь надо отвечать на вопросы НОРМАЛЬНЫЙ ВОЖАТЫЙ В первые дни устроит игру по станциям в рамках Хозяйственного или Организационного сборов. ВОЖАТЫЙ С ФАНТАЗИЕЙ Заранее до начала смены выстроит экскурсионную программу по лагерю на всю смену продумав что показывать в первую очередь что в середине смены о чем говорить в конце. Договорится с вожатыми соседних отрядов...
33167. Возрастные особенности детей 32.5 KB
  Дети 79летнего возраста имеют следующие возрастные характеристики : высокий уровень активности; процессы возбуждения преобладают над процессами торможения; эмоциональная непосредственность; повышенная работоспособность но в то же время высокая утомляемость в следствии чего необходим отдых в течении дня ; Высокая потребность в игре движении во внешних впечатлениях; Предпочтение к шумным коллективным играм; Высокая чувствительность к критике со стороны взрослых; Сознание различий пола; Становление независимости; Развитие...
33168. Как не скучно ехать в автобусе 34.5 KB
  И если всё это время просто так сидеть и наблюдать в окно весёлой она точно не покажется. Чем же можно занять это время Вопервых уже по дороге в лагерь вожатый должен начинать формировать отряд. А самое главное на время дороги нужно придумать какоенибудь развлечение.Так как север это очень красивое но в то же время и очень опасное место вы все должны уметь четко и быстро выполнять наши команды что бы не погибнуть Кольцовка что нужно взять в экспедицию на Северный полюс А теперь проверим все ли вы взяли ничего не забыли а...
33169. КОНЦЕРТ ВОЖАТЫХ 28.5 KB
  если их нет изначально то скорее всего и не будет Основной этап: когда всю смену все говорят что нужен вожатник но кто его будет делать не понятно все кто действительно его будут делать об этом попрежнему не знают Внимание Время когда надо думать как быть с вожатником приходит нежданнонегадано как полный абзац Группа добровольцев сбивается в каком нибудь лагерном помещении и начинает судорожно перебирать все мыслимые и немыслимые варианты подготовки проведения и темы вожатника Внимание Водка и все заранее подготовленные...
33170. Чем развлекать детей 23 KB
  Например такие: Эстафеты разнообразные состязания в ловкости быстроте и силе Викторины интеллектуальные конкурсы КТД коллективное творческое дело постановки спектаклей концертов и представлений конкурсы красоты талантов разное рукоделие изготовление поделок и т. Тема: Море тогда или конкурсы могут быть связаны с морскими предметами или они могут быть объединены единой сюжетной линией морское путешествие. Тут все конкурсы так или иначе привязаны к этому предмету. Сами конкурсы 1.
33171. Центральный банк, основы его деятельности. Функции центральных банков. Активные и пассивные операции центральных банков 55.5 KB
  Функции центральных банков. Активные и пассивные операции центральных банков. Деятельность любых центральных банков как следует из анализа их исторического развития и современного положения в рыночной системе подчинена следующим основным целям: обеспечению стабильности покупательной способности и валютного курса национальной денежной единицы ликвидности банковской системы созданию эффективного и бесперебойного ведения расчетов включая расчеты наличными деньгами. Центральный банк хранит кассовые резервы коммерческих банков...