2012-03-24 4 views
3

Заявление: «Статические переменные-члены могут быть ТОЛЬКО изменены статическими методами».C++: статическая переменная-член

Является ли это утверждение правильным, или переменные статического члена также могут быть изменены нестатическими методами?

Спасибо!

ответ

7

Неправильное использование. Статический член может быть доступен и изменен нестатической функцией-членом.

+0

благодарит за вашу помощь! – dudade

7

Это не так. static данные могут быть изменены любой функцией-членом. static методы также могут быть вызваны любой функцией-членом.

Это наоборот: это невозможно: static методы не могут вызвать не static методов и не могут получить доступ к объектам static.

Это связано с тем, что члены static (методы и данные) привязаны к классу, тогда как нестатика связана с экземплярами класса.

+0

Большое спасибо за подробный ответ! – dudade

1

Заявление неверное. Вы можете модифицировать статические элементы из любой функции-члена класса и из любой другой функции, из которой видна статическая член (т. Е. Общедоступная статика может быть изменена из любого места). Члены

0

static данных (и статические функции-члены) могут быть доступны из любого места в программе, доказанным, что спецификатор доступа позволяет ему:

struct test { 
    void foo() { 
     x = 1; 
     bar(); 
    } 
    static bar() { 
     x = 2; 
    } 
    static int x; 
}; 
int test::x = 0; 
int main() { 
    test::bar(); 
    test::x = 3; 
} 
Смежные вопросы