Составители:
Рубрика:
count++;
}
...
};
...
int A::count = 0; // Определение в глобальной области
void f()
{
A a;
// a.count++ - нельзя, поле count скрытое
// Изменение поля с помощью статического метода:
a.inc_count(); //или A::inc_count();
}
Статические методы не могут быть
константными (const) и виртуальными (vir-
tual). Недопустимо описывать статические и нестатические методы с теми же самыми
именами и типами аргументов. В отличие от методов типа inline, статические методы
глобальных классов подключаются при внешнем редактировании связей. Статические
члены класса, описанного локальным для какого-либо метода, не могут быть инициали-
зированы при внешнем редактировании связей. Статические члены глобальных классов
инициализируются как обычные глобальные объекты, но только внутри данного файла.
Основное использование статических членов класса есть сохранение общих для
всех объектов данных: число созданных объектов, выделенные ресурсы и т.п. Статиче-
ские элементы также сокращают число видимых глобальных имен.
Дружественные функции и классы. Иногда желательно иметь непосредственный
доступ извне к скрытым полям класса, то есть расширить интерфейс класса. Для этого
служат дружественные функции и дружественные классы. Дружественной функцией
класса называется функция, которая сама не является членом класса, но имеет полные
права на доступ к элементам класса типа private и protected. Во всех остальных аспектах
это есть нормальная функция. Поскольку такая функция не является членом класса, то
она не может быть выбрана с помощью операторов
. и - >. Дружественная функция клас-
са вызывается обычным образом. Для описания дружественной функции используют
ключевое слово
friend.
Дружественные функции применяются для доступа к скрытым полям класса и
представляют собой альтернативу методам. Метод, как правило, описывает свойство
объекта, а в виде дружественных функций оформляются действия, не являющиеся свой-
ствами класса, но концептуально входящие в его интерфейс и нуждающиеся в доступе к
его скрытым полям. Например:
class X
{
int i; // private
friend void friend_func(X *xptr, int);
public:
void member_func (int);
};
// определение функций
void friend_func(X *xptr, int a)
{//доступ к private-элементам через указатель
xptr->i=a;
}
86
count++;
}
...
};
...
int A::count = 0; // Определение в глобальной области
void f()
{
A a;
// a.count++ - нельзя, поле count скрытое
// Изменение поля с помощью статического метода:
a.inc_count(); //или A::inc_count();
}
Статические методы не могут быть константными (const) и виртуальными (vir-
tual). Недопустимо описывать статические и нестатические методы с теми же самыми
именами и типами аргументов. В отличие от методов типа inline, статические методы
глобальных классов подключаются при внешнем редактировании связей. Статические
члены класса, описанного локальным для какого-либо метода, не могут быть инициали-
зированы при внешнем редактировании связей. Статические члены глобальных классов
инициализируются как обычные глобальные объекты, но только внутри данного файла.
Основное использование статических членов класса есть сохранение общих для
всех объектов данных: число созданных объектов, выделенные ресурсы и т.п. Статиче-
ские элементы также сокращают число видимых глобальных имен.
Дружественные функции и классы. Иногда желательно иметь непосредственный
доступ извне к скрытым полям класса, то есть расширить интерфейс класса. Для этого
служат дружественные функции и дружественные классы. Дружественной функцией
класса называется функция, которая сама не является членом класса, но имеет полные
права на доступ к элементам класса типа private и protected. Во всех остальных аспектах
это есть нормальная функция. Поскольку такая функция не является членом класса, то
она не может быть выбрана с помощью операторов . и - >. Дружественная функция клас-
са вызывается обычным образом. Для описания дружественной функции используют
ключевое слово friend.
Дружественные функции применяются для доступа к скрытым полям класса и
представляют собой альтернативу методам. Метод, как правило, описывает свойство
объекта, а в виде дружественных функций оформляются действия, не являющиеся свой-
ствами класса, но концептуально входящие в его интерфейс и нуждающиеся в доступе к
его скрытым полям. Например:
class X
{
int i; // private
friend void friend_func(X *xptr, int);
public:
void member_func (int);
};
// определение функций
void friend_func(X *xptr, int a)
{//доступ к private-элементам через указатель
xptr->i=a;
}
86
Страницы
- « первая
- ‹ предыдущая
- …
- 84
- 85
- 86
- 87
- 88
- …
- следующая ›
- последняя »
