Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/studb20/public_html/index.php on line 4
 Статические функции - ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 11) онлайн - Studbook

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 11) онлайн

Статические функции

Если вы откроете главу 6 «Объекты и классы», то сможете найти там пример

STATIC, в котором было дано представление о статических данных. Напоминаем,

что статические данные не дублируются для каждого объекта. Скорее, один эле-

мент данных используется всеми объектами класса. В том же примере был пока-

зан класс, который запоминал, сколько у него было объектов. Давайте попробуем

расширить эту идею, показав, что функции, как и данные, могут быть статиче-

скими. Кроме демонстрации статических функций, наша программа создаст

класс, который присваивает идентификационный номер (ID) каждому из своих

объектов. Это позволяет спросить у объекта, кто он таков, что, кроме всего про-

чего, бывает полезно при отладке программ. Еще одна задача этого примера со-

стоит в том, чтобы пролить свет на деструкторы и работу с ними.

Листинг 11.15. Программа STATFUNC

// statfunc.cpp

// Статические функции и ID объектов

#include <iostream>

using namespace std;

///////////////////////////////////////////////////////////

class gamma

  {

  private:

    static int total;       //всего объектов класса

                            //(только объявление)

    int id;                 //ID текущего объекта

  public:

    gamma()                 //конструктор без аргументов

      {

      total++;              //добавить объект

      id = total;           //id равен текущему значению total

      }

    ~gamma()                //деструктор

      {

      total--;

      cout << "Удаление ID " << id  << endl;

      }

    static void showtotal() // статическая функция

      {

      cout << "Всего: " << total << endl;

      }

    void showid()           // Нестатическая функция

      {

      cout << "ID: " << id << endl;

      }

  };

//---------------------------------------------------------

int gamma::total = 0;       // определение total

///////////////////////////////////////////////////////////

int main()

{

  gamma g1;

  gamma::showtotal();

 

  gamma g2, g3;

 

 

  gamma::showtotal();

 

  g1.showid();

  g2.showid();

  g3.showid();

  cout << "----------конец программы----------\n";

  return 0;

}

 

18