66912

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

Лекция

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

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

Украинкский

2015-01-12

48 KB

15 чел.

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


 

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

34407. Методы экспертных оценок, их сущность. Индивидуальные и коллективные экспертные оценки, их разновидности и характеристика 26 KB
  1метод интервью беседа прогнозиста с экспертом по схеме вопрос ответ относительно перспектив развития прогнозируемого объекта 2 аналитический мд самостоятельная работа эксперта над анализом развития прогнозируемого объекта. Прогнозный сценарий определяет стратегию развития объекта. Коллективные экспертные оценки предполагают согласованность мнений экспертов по направлениям развития объекта: 1 м. Используется ряд приемов предполагающих систематизированное рассмотрение характеристик объекта.
34408. Методы экстраполяции и их характеристика 28 KB
  Методы экстраполяции относятся к формализованным методам. Методы экстраполяции являются наиболее распространенными и проработанными. Применяются следующие методы: м.
34409. Методы моделирования 32.5 KB
  Моделирование предполагает конструирование модели на основе предварительного изучения объекта или процесса выделения его существенных характеристик или признаков. Прогнозие с использованием моделей включает разработку модели ее экспериментальный анализ сопоставление результатов прогнозных расчетов на основе модели с фактическими данными состояния объекта или процесса корректировку и уточнение модели. Различают: а по уровню управления эконми и соцми процессами: макроэккие...
34410. Экономико- математические методы, используемые в ПиП экономических и социальных процессов 28 KB
  Важнейшими методами являются : метод межотраслевого баланса методы оптимизации симплексметод и др. корреляционнорегрессионный метод. метод межотраслевого баланса базируется на принципах разработки межотраслевого баланса позволяет осуществлять прогнозие развития экономики и ее отраслевой структуры исходя из конечных потребностей.
34411. Метод экономического анализа, его сущность и роль в ПиП 29.5 KB
  При проведении экономического анализа следует соблюдать системный подход. Сущность метода экономического анализа заключается в том что экономический процесс или явление расчленяется на составные части и выявляются взаимная связь и влияние этих частей друг на друга и на ход развития всего процесса. Процесс экономического анализа подразделяется на ряд стадий постановку проблемы определение целей и критериев оценки; подготовку информации для анализа; изучение и аналитическую обработку информации; разработку рекомендаций о возможных вариантах...
34412. Балансовый и нормативный методы ПиП, их взаимосвязь и направления совершенствования 29.5 KB
  В непроизводственной сфере применяются нормы характеризующие необходимый размер общей и жилой площади на 1 жителя потребление воды на 1 человека и др. В практике ПиП применяется система норм и нормативов включая нормы расхода сырьевых и топливноэнергетических ресурсов; нормы затрат труда; нормы и нормативы использования основных производственных фондов; нормативы капитальных вложений и капитального строительства; нормы и нормативы характеризующие эффективность общественного производства; финансовые нормы и нормативы; социальные нормы ....
34413. Программно-целевой метод планирования, его сущность и область применения 30 KB
  На втором этане выдается задание на разработку программы для решения определенной проблемы. На третьем этапе разрабатываются задания и мероприятия для реализации программы. Четвертый этап предполагает расчет основных показателей и ресурсного обеспечения программы. Определяются затраты материальных трудовых финансовых ресурсов необходимых для реализации программы.
34414. Принципы организации ПиП 29.5 KB
  Организация прогнозирования и планирования охватывает систему органов планирования на всех уровнях управления народным хозяйством определение их функций установление порядка разработки прогнозов и планов доведение важнейших показателей до исполнителей и организацию обеспечения их выполнения. Научными основами организации прогнозирования и планирования являются принципы т. В современных условиях важнейшими принципами организации планирования являются: децентрализация и демократизация; демонополизация; экономически выгодное участие...
34415. Органы ПИП 46 KB
  К центральным экономическим органам относятся: Министерство экономики; Министерство финансов; Министерство труда; Министерство статистики и анализа; Министерство предпринимательства и инвестиций; Министерство по управлению государственным имуществом и приватизации. Министерство экономики подчиняется Совету Министров и в своей деятельности руководствуется законодательством республики и положением которым определены его задачи и функции.; методическое и научное обеспечение проведения экономических реформ; разработка принципов...