Статические поля
Хотя каждый объект класса имеет одинаковый набор полей и методов, значения полей у каждого объекта свои, а результат вызова методов в общем случае зависит от того, из какого объекта метод вызывается. На самом деле, это не всегда так. Существуют особые члены класса, которые называют статическими. Статический член является общим для всех объектов этого класса. Необходимость в таких статических членах продиктована рядом практических соображений, и их использование во многих случаях оправдано. Например, в программе нужно контролировать количество созданных на данный момент объектов определенного класса. В этом случае создается статический член класса, значение которого определяется количеством объектов в работе. В отличие от обычного поля класса, статическое поле не исчезает при удалении объекта. В некотором смысле статические переменные напоминают глобальные переменные программы. Однако статические переменные, в отличие от глобальных переменных, полностью согласуются с принципами объектно-ориентированного программирования, и в частности с принципом инкапсуляции.
Статические члены объявляются, как и обычные, но перед статическим чле ном указывается ключевое слово static. В листинге приведен пример для статического поля.
#includeusing namespace std; class SimpleClass{ public: //Статическое поле: static int m; //Нестатическое поле: int n; void show(); }obj1,obj2; //Повторное объявление переменной: int SimpleClass::m; int main(){ SimpleClass::m=10; obj1.n=1; obj2.n=2; obj1.show(); obj2.show(); obj1.m=100; obj2.show(); return 0;} //Описание метода: void SimpleClass::show(){ cout << "Static field m = " << m << endl; cout << "Nonstatic field n = " << n << endl;}