2011-02-25 6 views

答えて

10

で静的変数を変更することができますはい、非静的メンバ関数は限り静的データメンバーを変更することができますデータメンバーの可視性により可能になります。

1

はい、小さなサンプルプログラムの場合はthis exampleを参照してください。

逆に、静的関数は、通常のメンバ変数が通常のメンバ関数と同じように変更することはできません。

+0

あなたは非静的メンバと同じ構文を使用して、静的メンバを参照することができます。また、class_name :: static_var構文を使用するオプションもあります。 – Ferruccio

+0

@Ferruccio - ありがとう、編集しました。 – justkt

+1

静的メンバ関数は、静的でないメンバ関数と同じ規則で、静的でないデータメンバを修正することができます。*修正するクラスのインスタンスを指定できる場合は、 'some_instance.some_member = some_value'。静的メンバ関数に 'this'はなく、非静的メンバ関数とは異なり、' some_member'という名前は暗黙的に 'this-> some_member'を意味するものではありません。したがって、静的メンバー関数はインスタンスをどこかから取得する必要があります。非静的メンバー関数は便利であり、メンバーの指定方法を簡略化しています。 –

0

はいできます。

「静的メンバー」は、「非インスタンスメンバー」がインスタンスを特徴付ける間にクラスを特徴付ける属性であるかのように考える。

クラスはコンセプトを定義しますが、インスタンスはこのコンセプトの発生です。 灰色の例では、クラスHumanがコンセプトですが、Andyはインスタンスです。あなたは60億人のうちの1人の人間です。

人間の概念は、すべての人間は手足、頭、目などを持っていると言います。それらはインスタンスフィールドです。すべての人間のインスタンスは、独自の手足、頭、目を持っています...

私は彼/彼女の職業に応じて人間のコンセプトを専門にすることができます。 明らかにコンピュータエンジニアを定義するComputerEngineerクラスを考えてみましょう。それは修飾子(または属性)を持つように コンピュータエンジニアの任意のインスタンスがヒトであり、まだ手足、頭、目...

ComputerEngineerクラスを持っているが、しかし、最低賃金を言うようにモデル化することができますカテゴリsindicateに許されるもの。 minimumWage

これは、同じ属性がすべてのクラスインスタンスに共通の値でなければならない状況です。

このminimumWageはインスタンスメンバーではなく、インスタンスごとに異なる値を持つことはできませんが、それはまだコンセプトに関係しているため、アクセスできることは妥当であることに注意してください。

次の偽のコードは、静的メンバにアクセスするインスタンスメソッドを持っていることの意味で有効です。

class Human 
{ 
protected: 
    Limb leftArm; 
    Limb leftLeg; 
    Limb rightArm; 
    Limb rightLeg; 
}; 

class ComputerEngineer : public Human 
{ 
protected: 
    static double _minimumWage; 
    double _wage; 

public: 
    wage(double w) // non-static member function can only be called by instances. 
    { 
    if (w < minimumWage) 
     throw "You're gonna have trouble with the union!"; 
    _wage = w; 
    } 

    minimumWage(double w) 
    { _minimumWage = w; } 
}; 
関連する問題