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. Статичну функцію-члена можна викликати для об'єкта її класу або незалежно від будь-якого об'єкта, а для  звернення до неї достатньо використовувати  ім'я класу  і оператор дозволу області видимості.


 

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

73759. Основные направления трансформации системы регулирования социально-трудовых отношений в современных условиях 82.5 KB
  Имеется ввиду расширение социального диалога за рамки собственно социальнотрудовых отношений. Однако численность профсоюзов далеко не единственный показатель их силы и возможностей участия в регулировании социальнотрудовых отношений. За предыдущие годы профсоюзам удалось стать реальным институтом рынка труда и использовать для участия в регулировании социальнотрудовых отношений самые различные институты и механизмы: благодаря наличию механизмов распространения условий коллективных договоров и соглашений заключаемых профсоюзами с...
73760. Загальні засади організації бухгалтерської служби 122 KB
  Функції облікових працівників; види розподілу праці між обліковими працівниками у межах бухгалтерської служби; кваліфікаційні та етичні вимоги які висуваються до бухгалтерів на сучасному етапі.
73761. Основные черты социального партнерства в Российской Федерации 45.5 KB
  Для пореформенной России характерна также сегментированность социальнотрудовых отношений и неоднородность качества трудовой жизни по отраслям и секторам экономики чему способствовало нарастание отраслевых диспропорций в оплате труда. Сформированные в стране механизмы регулирования социальнотрудовых отношений как законодательные так и коллективнодоговорные недостаточно эффективны. В целом регулирование социальнотрудовых отношений развивается в рамках советской парадигмы экономического развития которую принято называть экстенсивной...
73762. Социально-педагогическое сопровождение детей, оказавшихся в трудной жизненной ситуации (на примере лечебно-реабилитационного научного центра детской гематологии, онкологии, иммунологии) 523 KB
  Несмотря на то, что в настоящее время на решение проблемы сопровождения детей в трудной жизненной ситуации направлены усилия многих специалистов, использующих широкий комплекс методов - медицинских, социально-педагогических и психологических, они часто оказываются недостаточно эффективными.
73763. Організація роботи бухгалтерської служби 106.5 KB
  Регламентація діяльності облікових працівників. Після вивчення теми 5 студент повинен вміти: розробити Положення про бухгалтерську службу та посадові інструкції для облікових працівників; спланувати роботу бухгалтера; охарактеризувати вимоги до обладнання робочого місця бухгалтера; скласти акт прийманняпередачі справ при зміні бухгалтера. Регламентація діяльності облікових працівників У ході виконання своїх обов’язків між бухгалтерами та іншими працівниками підприємства виникають взаємовідносини з різних питань що дозволяє виділити такі...
73764. Організація діловодства, документування операцій та документообігу 144.5 KB
  Однією з умов успішної діяльності підприємства є якість управління ним, яке залежить від рівня інформаційного забезпечення керівництва. процес прийняття управлінського рішення передбачає отримання даних, їх аналіз, узагальнення та підготовку в розрізах і форматі, необхідних для управлінського персоналу.
73766. Текст як форма реалізації мовнопрофесійної діяльності. Стилі сучасної української літературної мови у професійному спілкуванні 85.5 KB
  Функціональні стилі української мови та сфера їх застосування Стиль – 1 суспільно необхідний історично сформований різновид літературної мови її функціональна підсистема що обслуговує певну сферу суспільної діяльності мовців і відповідно до цього має свої особливості добору й використання мовних одиниць. Кожний стиль має свою сферу використання призначення ознаки і мовні засоби; 2 сукупність прийомів використання мовних засобів що є характерною для творчості окремого письменника діяча культури мовця індивідуальний стиль; 3...
73767. Східня Україна і козачина на порозі XVII ст. Соціальне значіннє козацтва 357.5 KB
  До сього треба додати ще як постулят також на перший погляд елєментарний і скромний але в практичнім переведенню дуже мало удобоносний се право воєнних контінґентів козацьких взаміну за їx службу державі й охорону полудневих границь на приставстваrdquo; кватири і виживленнє в коронних маєтностях. що йно тільки сам замок збудовано люстрація виказує 36 сїл або хуторівrdquo; що належать до староства Білоцерківського 9 таких же осад на міських ґрунтах десяток сїл в шляхетських державах крім того в Романівськім ключу 5 сїл цїлий...