この特定の例では、 a の選択static is_char()
はおそらくドキュメントのものです。その意図は、is_char()
メソッドがクラスの特定のインスタンスに限定されていないことを印象づけることですが、機能はクラス自体に固有のものです。
言い換えれば、それを作ることによって、static
彼らはそれがある種の効用関数であると言っているis_char()
のです...特定のインスタンスの状態に関係なく使用できるものです。それを作成することによりprivate
、彼らはあなたが(クライアントとして)それを使用しようとすべきではないと言っています. それはあなたが思っていることをしないか、非常に制約され、制御された方法で実装されています。
@Mark Ransom の回答は、プライベートな静的メンバー関数を実際に使用するための良い点をもたらします。具体的には、そのメンバー関数は、静的オブジェクトまたはインスタンス化されたオブジェクトの渡されたインスタンスのいずれかのプライベートおよび保護されたメンバーにアクセスできます。
これの一般的なアプリケーションの 1 つは、オブジェクト指向の方法で 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();
}
...