2017-07-10 7 views
-1

だから、人々が私にgoogeそれを教えている前に、私は持っていると私はここにいる理由です。:: Cでの使用:: + +

私の質問は -

ある方法::コンストラクタ以外のものを使用することができ?

コンストラクタの正しい規則は、それらが属しているクラスと同じ名前を持つ必要があることです。しかし、このコードでは、それに関係なく使用されています。誰かがなぜ、どのように教えてくれますか?

編集:最初のブロックはヘッダーファイルで、2番目のブロックは前記ヘッダーのcppソースです。


class Rainbow{ 
public: 

    static void registerItems();//Does exactly what it says 
    static void initClientData();//Initializes stuff like icon and texture 
    static void initCreativeItems();//Adds them to the creative inventory 


    static Item* mSword;//This is our item. 
}; 

void Rainbow::registerItems(){ 
mSword = new SwordItem(3000);//Add our sword object to our SwordItem class 
} 

void Rainbow::initClientData(){ 
mSword->setIcon("rainbow_sword",0);//Sets its icon image 
} 

void Rainbow::initCreativeItems(){ 
Item::addCreativeItem(3000,0);//Uses the ID to add it to the creative inventory 
} 
+0

::コンストラクタ以外のものに使用できますか? - はい、できます。コンストラクタは単なるメソッドです。 – pm100

+1

あなたの質問では '::'の4つの使い方はコンストラクタとは関係ありません。ここにコンストラクタはありません... – HolyBlackCat

+0

あなたはスコープ解決演算子について話しています。 –

答えて

3

::シンボルは、与えられた名前が別の名前付きのものの中に発見されるたびに使用されますが、含むものはオブジェクトではありません(ただし、クラス、名前空間です、または列挙)。

namespace n { 
    struct s { 
     enum e { 
      q 
     }; 
    }; 
} 

n::s::e my_value = n::s::e::q; 

これは左結合され、この場合にはen::sq中に発見されるようにn::s::e内部にあります。

1

あなたはスコープ解決演算子(::)について話しています。スコープを表すために使用されます。

int a=5; //Global Variable 

int main() { 
    int a=1; //local variable 
    cout<<a; 
    cout<<::a; //We are explicitly mentioning that we need the global scope 'a' variable 
    return 0; 
} 

出力:

コンストラクタは単なる方法では、日付のメンバーを初期化するために、独自のメソッドを作ることができます。オブジェクトが作成されると、コンストラクタ(クラスと同じ名前)が自動的に呼び出されます。

通常、作成時にオブジェクトを初期化するためにデフォルトコンストラクタが呼び出されますが、これは自動的です。 次に、メソッドを明示的に呼び出して、希望するデータメンバーの値を設定することができます。

ケースの正しい説明については、この回答の上のコメントをご覧ください。

+1

与えられた例では、デフォルトのコンストラクタは簡単なので、*呼び出されません*。メンバは静的なので、作成、初期化、または初期化されません。メソッドはグローバル変数を変更します。 – Potatoswatter