C ++: Разница между функцией, не являющейся членом, и функцией статического члена?

Простой вопрос здесь: в чем разница между статической функцией-членом, то есть функцией, которая может быть вызвана без необходимости доступа к ней объекта (просто используя идентификатор класса), и функцией, не являющейся членом? Здесь я спрашиваю как концептуально, так и функционально.

Являются ли функции, не являющиеся членами, концептуально статичными?

4

Решение

Статические функции-члены могут получить доступ к закрытым и защищенным разделам класса. Функции, не являющиеся членами, не могут сделать это по умолчанию. Они могут сделать это, только если класс дает им дружбу.

Еще один момент, на который следует обратить внимание: имена статических функций-членов находятся в области видимости класса. Несколько классов могут иметь статические функции-члены с одинаковыми именами, не беспокоясь о конфликте имен.

6

Другие решения

Я хотел бы добавить ответ @R Саху что перегруженные операторы не могут быть статическими функциями класса. 🙂

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

1

Другое преимущество статической функции-члена состоит в том, что это единственный способ, если вы хотите вызвать ее в потоке в Windows API. CreateThread требует, чтобы функция была либо в глобальном пространстве, либо, если она является функцией-членом, она должна быть статической. И нет никакого способа обойти это, по крайней мере, насколько мне известно.

0
По вопросам рекламы [email protected]