раздница в 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