2017-04-20 15 views
-5

私は最近コーディングを開始しましたが、これが意味することをしばらく理解しようとしています:
static thing* dostuff(); thing* thing::dostuff(){};
私は関数ポインタを検索しましたが、それらは異なって見えます。これらのタイプの関数は、コードの重要な部分に出てくるようで、その意味と使用方法を知りたいと思います。ありがとうございます。ポインタ?ポインタ関数?

+1

ポインタを返す関数です。 – Donnie

+0

[tag:ポインタ] – edmz

+0

を読んでください。私のクリスタルボールは、いくつかのクラスの 'thing'のクラス定義の最初のもので、後者はいくつかのソースファイルを実装しています。後者は 'thing 'ポインタを返すと主張し、実際には何もしないので、横たわっています。どちらもポインタを返す関数です。関数ポインタにはこれと何も関係がありません。 – WhozCraig

答えて

2

コードフラグメントstatic thing* dostuff()thing* thing::dostuff(){}は、関数ポインタとは関係ありませんが、関数の宣言とこの関数の定義/実装です。

static thing* dostuff();は、データタイプがthing(おそらくクラスタイプ)のポインタを返す関数を宣言します。

dostuffは、実際には、クラスthingで定義されているメンバ関数です。キーワードstaticはクラスインスタンスにバインドされていないメンバーを宣言し、静的メンバー関数はオブジェクトに関連付けられていません。

class thing { 
    static thing* dostuff(); 
}; 

その後、thing* thing::dostuff(){}はクラスthingのこの静的メンバ関数の実装は次のとおりです。呼び出されたとき、彼らはthis -pointerを持っていません。接頭辞thing::は、この関数がクラスthingの一部であることを示します。

0

thing*のポインタを返すのは、dostuffと呼ばれる静的メンバー関数thingです。

何も特別で奇妙なことはありません。