Для этого конкретного примера выбор static is_char()
, скорее всего, документальный. Цель состоит в том, чтобы убедить вас, что метод is_char()
не противоречит конкретному экземпляру класса, но функциональность специфична для самого класса .
Другими словами, делая это static
, они говорят, что is_char()
- это своего рода функция полезности, которая может использоваться независимо от состояния данного экземпляра. Делая это private
, они говорят, что вы (как клиент) не должны пытаться использовать его. Он либо не выполняет то, что вы думаете, либо реализуется очень ограниченным, контролируемым образом.
@ Ответ Марка Рэнсома поднимает вопрос о практическом использовании частной статической функции-члена. В частности, эта функция-член имеет доступ к закрытым и защищенным членам статического объекта или переданного экземпляра экземпляра объекта.
Одним из распространенных применений этого является абстракция реализации pthread в некоторой степени объектно-ориентированным способом. Ваша функция потока должна быть статической, но объявление ее закрытой ограничивает доступ этой функции к классу (для всех, кроме самых определенных). Потоку может быть передан экземпляр класса, в котором он «скрыт», и теперь у него есть доступ для выполнения логики с использованием данных члена объекта.
Упрощенный пример:
[MyWorkerClass.h]
...
public:
bool createThread();
private:
int getThisObjectsData();
pthread_t myThreadId_;
static void* myThread( void *arg );
...
[MyWorkerClass.cpp]
...
bool MyWorkerClass::createThread()
{
...
int result = pthread_create(myThreadId_,
NULL,
myThread),
this);
...
}
/*static*/ void* MyWorkerClass::myThread( void *arg )
{
MyWorkerClass* thisObj = (MyWorkerClass*)(arg);
int someData = thisObj->getThisObjectsData();
}
...