Только представьте, у нас есть следующий класс:Как статическая функция-член может вызвать статический частный элемент данных? Какая внутренняя трансформация необходима?
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(). Теперь вопрос: как функция, которая не имеет этого «указателя», может обращаться к переменной-члену класса m_a? В книге Липман я прочитал, что:
((Point3d*) 0)->object_count();
где
object_count()
ничего не делает больше, чем возвращать статический член данных_object_count
. Как изменилась эта идиома? ..............................
................. .............
// внутреннего преобразования вызова
object_count((Point3d*) 0);
язык решение было введение статических функций-членов в официальном Cfront Release 2.0. Первичной характеристикой является статическая функция-член, так как она не имеет указателя
this
.
Я не понимаю, как мы можем наложить 0 на объект типа класса?
Вы вводите 0 в тип указателя. Не для класса. Также статический метод обычно называется так: 'A :: get_sum()' not 'a.get_sum()'. Точкой статических членов является то, что они связаны с самим классом, а не с каким-либо экземпляром класса. Фактически, они создаются до того, как кто-либо из членов класса будет проинструктирован. –
Означает ли это, что каждая статическая функция имеет такой указатель ((имя класса *) 0) и используя этот указатель, он может получить доступ к каждому члену данных в класс? –
Я не знаю деталей реализации, но вы можете думать об этом так, как я предполагаю. Компилятор создает адрес для класса, из которого он обращается к статическим членам посредством смещения. Таким образом, статический член имеет постоянный адрес на протяжении всего жизненного цикла программы. –