C ++研究ノート-非静的メンバー関数の不正な呼び出しエラー



C Study Notes Illegal Call Error Non Static Member Function



今日プログラムを書いて、非静的メンバーの不正な呼び出しエラーを見つけました
元の理由は次のとおりです。

1静的メンバー関数はグローバル関数と同等ですが、クラスの名前空間の制限は1つだけです。静的メンバー関数は、クラスの関数です。インスタンスオブジェクトが動作していることを指定する必要はありません。静的メンバー関数を呼び出すクラスまたはインスタンスオブジェクトのいずれかによって呼び出すことができます。注:静的メンバー関数は、静的メンバー変数と静的メンバー関数にのみアクセスできます。



2.同じクラスのオブジェクトインスタンスが多数あり、各インスタンスには独自の異なるメンバー変数値があります。各インスタンスは、メンバー関数を介してそのメンバー変数を操作します。したがって、メンバー関数呼び出しは、どのインスタンスオブジェクトが動作しているかを明確に示す必要があります。注:もちろん、クラスメンバー関数は静的メンバー変数または静的メンバー関数にもアクセスできます

次の例は、



class Test { public: int f() { cout << 'member function' << endl } static int g() { cout << 'static member function' << endl } public: enum { size_f = sizeof(f()), // error, illegal call of non-static member function size_g = sizeof(g()) // ok } } int main() { Test::g() // ok Test::f() // error, illegal call of non-static member function Test t t.g() // ok t.f() // ok }