Использование статических членов...225
Статические данные-члены объявляются в классе с помощью ключевого слова static, как показано в приведённом ниже примере.
class Student
{
public :
Student( char *pName = "no name" ) : name( pName )
{
noOfStudents++ ;
}
~Student( )
{
noOfStudents-- ;
}
protected :
static int noOfStudents ;
string name ;
} ;
Student s1 ;
Student s2 ;
Член noOfStudents входит в состав класса Student, но не входит в состав объектов s1 и s2. Таким образом, для любого объекта класса Student существуют отдельные члены name и только один noOfStudents, который доступен для всех объектов класса Student.
"Хорошо,— спросите вы,— если место под noOfStudents не выделено ни в каком объекте класса Student, то где же он находится?" Ответ прост: это место не выделяется. Вы должны сами выделить для него место так, как показано ниже, int Student::noOfStudents = 0 ;
Этот своеобразный синтаксис выделяет место для статического члена класса и инициализирует его нулём. Статические данные-члены должны быть глобальными ( как статические переменные не могут быть локальными по отношению к некоторой функции ).
«Для любого члена, имя которого встречается вне класса, требуется указание класса, к которому он принадлежит.»
[Помни!]
«Такое выделение памяти вручную удивляет, но только до тех пор, пока вы не столкнётесь с проектами, в которых используется несколько модулей с исходным кодом. С++ должен знать, в каком именно .срр-файле надо выделить пространство для статической переменной. В случае нестатических членов это не составляет проблемы, так как память выделяется там и тогда, где и когда создаётся объект класса.»
[Советы]
_________________
225 стр. Глава 19. Статические члены
Больше книг — больше знаний!
Заберите 20% скидку на все книги Литрес с нашим промокодом
ПОЛУЧИТЬ СКИДКУ