Представьте, что у нас есть следующий класс:
class A
{
private:
static int m_a;
public:
A() {}
static int get_sum(int b);
};
int A::m_a = 5;
int A::get_sum(int b)
{
return m_a + b;
}
int main() {
// your code goes here
A a;
int c = a.get_sum(10);
cout << "C=: " << c << endl;
return 0;
}
В приведенном выше коде у нас есть класс, который содержит одну закрытую статическую переменную-член, которая вызывается в нашей публичной статической функции-члене get_sum (). Теперь вопрос: как функция, у которой нет указателя «this», может получить доступ к переменной члена класса m_a? В книге Липмана я прочитал это:
(( Point3d* ) 0 )->object_count();
где
object_count()
ничего не делает, кроме как вернуть_object_count
член статических данных. Как развивалась эта идиома?
…………………………
…………………………
// внутреннее преобразование вызова
object_count(( Point3d* ) 0 );
Языковым решением было введение статических функций-членов
в официальном выпуске cfront 2.0. Основная характеристика
статическая функция-член состоит в том, что она безthis
указатель.
Я не понимаю, как мы можем привести 0 к объекту типа класса?
Статические функции-члены не имеют этого указателя, а статический член-член данных зависит от класса, а не от объекта. Таким образом, статические функции-члены могут обращаться к статическим переменным-членам.