2013-08-09 8 views
0

Почему мы должны объявлять статическую функцию-член для доступа к частной статической переменной? Почему бы просто не использовать публичную функцию для доступа к s_nValue? Я имею в виду, почему лучше использовать статическую функцию-член вместо нестатической публичной функции?Частная статическая переменная

class Something 
{ 
    private: 
    static int s_nValue; 

}; 

int Something::s_nValue = 1; // initializer 


int main() 
{ 

} 
+2

Конечно, вы можете использовать публичную функцию-член для доступа (получения или установки) статических переменных-членов, даже если статическая переменная-член является частной. –

+1

Вопрос непонятен! – Nawaz

+0

@Nawaz Я прочитал его на learncpp.com, что его лучше использовать статическую функцию-член. Я хочу знать, есть ли проблемы с обычной публичной функцией get_Value? Теперь я ясно? – Jigyasa

ответ

5

Почему мы должны объявить статическую функцию-член, чтобы получить доступ к собственной статической переменной?

Вы не должны:

class Something 
{ 
    private: 
    static int s_nValue; 

    public: 
    static int staticAccess() { return s_nValue; } 
    int Access() { return s_nValue; } 

}; 

int Something::s_nValue = 1; // initializer 


int main() 
{ 
    Something s; 
    Something::staticAccess(); 
    s.Access(); 

    return 0; 
} 

Оба метода работает as can bee seen here

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

2

Если вы используете функцию pubilc, вы должны вызвать ее с помощью объекта, и нецелесообразно вызывать статическую функцию с объектом, поэтому лучше сохранить ее в статическом методе, который может быть доступен непосредственно через «имя_файла ::»,

1

Почему мы должны объявлять статическую функцию-член для доступа к частной статической переменной?

Вам не обязательно. Вы можете получить доступ к частному статическому члену из любой функции-члена, статической или другой. Вы также можете получить доступ к нему из любой функции друга или функции-члена класса друга.

Почему бы просто не использовать публичную функцию для доступа к s_nValue?

Потому что это нет простой, чем статическая функция. Вам нужен объект для вызова нестатической функции-члена; почему бы просто не разрешить доступ к статической переменной без создания объекта?