LINUX.ORG.RU

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


0

0

раздница в 2х последующих классах в том, что один из них определен, как static, в каждом методе своя статическая переменная. В функции main создается по 2 экземлпляра класса и запускается метод. Казалось бы для каждого экземпляра класса one должна быть создана своя статическая переменная, тогда как для экземпляров класса two она должна быть одна, так как они имеют один общий метод. 

#include <iostream>

class one
{
 public:
   void method ()
   {
      static int var = 0;
        var++;
        std::cout << var << std::endl;
   }
};

class two
{
 public:
   static void method ()
   {
      static int var = 0;
        var++;
        std::cout << var << std::endl;
   }
};

int
main (void)
{
   one a1, b1;
   two a2, b2;

   a1.method ();                // у каждого своя статическая переменая переменная var 
   b1.method ();                // и она будет равна 1

   a2.method ();                // одна единственная var для всех, 
   b2.method ();                // т.е. после этих вызовов var будет равна 2
}

tima@tima:~/source/temp> g++ -o st st.cpp
tima@tima:~/source/temp> ./st
1
2
1
2 

почему не так?
tima@tima:~/source/temp> g++ -o st st.cpp
tima@tima:~/source/temp> ./st
1
1
1
2 

хотя на Ц++ не пишу, может нада переменную декларировать в начале как статик?

попробуй может получится!

djung ★★
()

статическая переменная объявленная внутри функции члена будет такой же статической переменной, за исключением что доступ к ней будет только через функии члены

acefsm
()

вообще не помешало бы почитать Lippman - Inside the C++ object model

acefsm
()

Если ты хочешь иметь единственную статическую
переменную для всех экземпляров класса , то объяви
её в самом классе,не в методе класса .

class two{
void method()
{cout<<++var;}
static int var;
}

обязательно проинициализируй.
int two::var=0;

kitov ★★★
()
Ответ на: комментарий от kitov

>Если ты хочешь иметь единственную статическую переменную для всех экземпляров класса

а что бывают не единственные? -)

acefsm
()
Ответ на: комментарий от acefsm

Очень давно , ещё до рождения Страуструпа ...
Заканчиваем флуд :-)

kitov ★★★
()
Ответ на: комментарий от dilmah

<flame mode="flood">Неа, просто мир у нас бинарный, одиночная система счистления только для зеков, согласно ru.wikipedia.org</flame>

krum
()

> one a1, b1;
> two a2, b2;


Уверены, что не ошиблись в этих 2х строках?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.