LINUX.ORG.RU

Статические функции-члены


0

0

Объясните, можно ли из статических (вообщем сабж) обращаться к нестатическим членам класса.

Пример:
class Example{
int a;
static void func();
}

void Example::func()
{
a= 4;
}
Пишет что Example::a - неправильно.

P.s.
На синтаксис не смотреть важен принцип.

★★

RE:

На плюсах давно не писал, но если провести аналогию с Java, то из статических нельзя обращаться/вызывать нестатические, потому что статические функции могут быть вызваны через имя класса, а не объекта, т.е. объекта вообще может не существовать.

Murr ★★
()

Очевиндый способ: передать статическому методу this в параметрах.
Но они как бы неспроста статические-то.

jackilI
()

Статические функции-члены от нестатических отдичаются именно тем, что при вызове им не передается this указатель на структуру данных инстанса. Следовательно - напрямую к _нестатическим_ ресурсам этого инстанса они обратиться не могут. В твоем примере нужно либо объявить a тоже как статический ресурс: class Example{ static int a; static void func(); };

int Example a = 0;

void Example::func(){ a = 4; }

либо действительно передавать ей явным образом указатель на структуру.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.