名前空間(スコープ)

C++で App:: のような「名前空間(正確にはスコープ)」の使い方は、
どのクラスや名前空間に属するかを明示するために使います。

省略できる場合

• 同じスコープ内(同じクラスや名前空間内)で使う場合
→ 省略できます。
• 例:App クラスのメンバ関数内で Crea() を呼ぶ場合、App::Crea() ではなく Crea() だけでOK。
• using宣言やusing namespaceで名前空間を導入している場合
→ 省略できます。

省略できない場合

• 他のスコープ(クラス外や名前空間外)から呼び出す場合
→ 省略できません。
• 例:main.cpp から App クラスの静的関数 Crea() を呼ぶ場合は App::Crea() と書く必要があります。
• 同名の関数や変数が複数のスコープに存在する場合
→ どれを使うか明示するために App:: などを付けます。

なるほど、もしかしてヘッダファイル名とソースファイル名はスコープとしては機能していない。 だからソースファイルでヘッダファイル名をインクルードして関数定義では App:: は省略出来ない、で合っていますか?

はい、その理解で正しいです!
詳しく解説
• ヘッダファイル名やソースファイル名はスコープ(名前空間やクラス)とは関係ありません。
• ファイル名は単なるファイルの区切りであり、C++のスコープ(App:: など)はクラスや名前空間によって決まります。
• 関数定義で App:: を省略できるのは、クラス宣言の中(ヘッダファイルのクラス定義内)だけです。
• クラス外(ソースファイルなど)でメンバ関数を定義する場合は、App::関数名 のようにスコープを明示する必要があります。
• ヘッダファイルをインクルードするのは、型や関数の宣言を他のファイルで使えるようにするためです。
• 省略できるかどうかは、どのスコープで定義・宣言しているかによります。

まとめ:

• ファイル名はスコープに影響しない。
• クラス外でメンバ関数を定義するときは App:: が必要。
• クラス内(宣言部)では省略できる。
この考え方で合っています!

コメント

タイトルとURLをコピーしました