Я видел следующий код:
http://sourcemaking.com/design_patterns/singleton/cpp/1Может ли статическая переменная-член вызывать нестатические функции-члены?
class GlobalClass
{
private:
int m_value;
static GlobalClass *s_instance;
GlobalClass(int v = 0)
{
m_value = v;
}
public:
int get_value()
{
return m_value;
}
void set_value(int v)
{
m_value = v;
}
static GlobalClass *instance()
{
if (!s_instance)
s_instance = new GlobalClass;
return s_instance;
}
};
GlobalClass *GlobalClass::s_instance = 0;
void foo(void)
{
GlobalClass::instance()->set_value(1); // static variable calls non-static functions
cout << "foo: global_ptr is " << GlobalClass::instance()->get_value() << '\n';
}
Насколько я знаю (поправьте меня, если я ошибаюсь, здесь),
Статические функции могут только доступ (запись/чтение) статические переменные-члены
Функции, не являющиеся статическими, могут иметь доступ к переменным статическим членам (запись/чтение)
На основании вышеприведенного образца кажется, что статическая переменная может обращаться к нестационарным функциям.
Это правильно?
Статическая функция-член не может получить доступ к нестатической переменной-члену. – q0987
@ q0987: Да, может. Я могу привести вам пример, но я бы предпочел, чтобы вы сначала остановились и подумали о моем ответе. Научиться думать о программном обеспечении - очень важная часть обучения программированию. –
Вот ваш пример: http://ideone.com/gX5wF –