2017-09-15 10 views
3

静的メンバー機能とグローバル機能の違いは何ですか?静的メンバー関数とグローバル関数の違いは何ですか?

void globalFunc() 
{ 
} 

class Test 
{ 
    public: 
    //In grammar side, object's not own this function 
    static void staticFunc(); 
}; 

静的メンバ関数は、それが意味 に分類し、アクセス範囲を制限することができ、グローバル関数ですが。

しかし、私は静的メンバー関数の呼び出し規約 が[この呼び出し]である理由を理解できません。

通常のメンバ関数は、呼び出し元オブジェクトのアドレスが必要なので、[この呼び出し]でなければならないが、静的メンバ関数がこの呼び出し規則を持つ理由は分かりますか?私はそれはオブジェクトの 機能ではないので、それは呼び出し元のアドレスを必要としないと思う。 静的メンバー機能とグローバル機能には違いがありますか?プライベートおよびクラス内の静的データメンバーを保護(未文法側ではなく、また、低電圧側)

+1

申し訳ありません、「[this call] '? – Charles

+0

静的メンバ関数は、静的でないメンバ関数(あたかも関数で 'this'を利用できないように)として呼び出すことができます。静的メンバー関数は 'extern" C "'にすることはできません。正式には、Cのコールバックとして移植可能に使うことはできませんが、コンパイラが実際的でないデフォルトを持つことはほとんどありません。 –

+0

呼び出し規約は実装定義です。どの実装を参照していますか? –

答えて

5

静的クラス機能することができます

  • アクセス。
  • プライベートおよび保護された静的関数にアクセスします。
  • 静的関数にクラスのインスタンスがある場合は、クラス内のプライベートおよび保護されたインスタンスごとのデータメンバーにアクセスします。
  • 静的関数にクラスのインスタンスがある場合、プライベートで保護されたインスタンス単位の関数にアクセスします。
  • 基本クラスの同じ名前のシャドー関数。
  • 保護されたデータにアクセスし、基本クラスで機能します。

グローバルでない非友人機能は、それらのいずれも実行できません。

+2

STATICメンバーと関数にしかアクセスできないようにしてください。 – FilipRistic

+0

@ArnavBorborah最初の2つの点は実際には正しいです。 – juanchopanza

+0

@FilipRistic:その他もそうですが、クラスのインスタンスを提供する必要があります。 – Jarod42

関連する問題