![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Статические данные-члены класса
Каждый объект класса имеет свою копию данных - членов класса. Иногда необходимо, чтобы все объекты одного класса имели доступ к какой-то общей переменной, а не к копии переменной в каждом объекте. Эта переменная может быть флажком условия, указателем на программу обработки ошибок для класса и т.д. Другими словами, в статических переменных удобно хранить общие характеристики класса. Чтобы данное-член класса разделялось всеми объектами данного класса и хранилось в одном месте, его надо объявить со спецификатором класса памяти static. Статическое данное-член класса можно рассматривать как глобальную переменную класса. " Статичность" такого данного обеспечивается чрезвычайно простым способом: память под него резервируется при запуске программы, т.е. еще до того, как программист явно создаст первый " настоящий" объект данного класса; при этом все объекты, сколько бы их ни было, используют эту заранее созданную одну-единственную копию своего статического члена. Доступ к статическому члену класса выполняется, как и к любому другому члену класса; на статические члены класса распространяются правила видимости private, public и protected. Поэтому, если статический член объявлен, например, в личной части класса, получить доступ к нему можно лишь с помощью функций-членов этого класса (или привилегированных функций). Объявление статического члена в теле класса не является определением, т.е. это объявление не обеспечивает распределение памяти и инициализацию. Нельзя инициализировать статическое данное-член класса в теле класса, а также в функциях-членах класса. Статические члены должны инициализироваться аналогично глобальным переменным в области видимости файла, только один раз, обязательно вне класса. Все сказанное иллюстрирует следующий пример. Статические функции-члены класса Использование спецификатора класса памяти static применительно к именам функций имеет несколько другой смысл, чем его использование применительно к данным. В самом деле, только что рассмотренная интерпретация слова static не имеет смысла применительно к функциям-членам класса: для любой такой функции хранится только одна копия ее кода, которая используется при работе с различными объектами данного класса. Особенностью статических функций-членов класса является следующее: как и к статическому данному-члену класса, к ней можно обратиться еще до того, как в программе создан первый объект класса.
|