Как статическая функция-член может вызывать статический закрытый элемент данных? какая внутренняя трансформация нужна?

Представьте, что у нас есть следующий класс:

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 к объекту типа класса?

0

Решение

Статические функции-члены не имеют этого указателя, а статический член-член данных зависит от класса, а не от объекта. Таким образом, статические функции-члены могут обращаться к статическим переменным-членам.

0

Другие решения


По вопросам рекламы [email protected]