Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

C++

C++の「::」の記載の意味について

投稿日:2021年9月16日 更新日:

 

<目次>

(1) C++の「::」の記載の意味について
 (1-1) 「::」の意味は?
 (1-2) サンプル①:スコープ演算子「::」を使ってグローバル変数にアクセス
 (1-3) サンプル②:スコープ演算子「::」を使って関数にアクセス
 (1-4) 補足

(1) C++の「::」の記載の意味について

C++で「XXXXXX::YYYYY()」のような記述を見たことがありますでしょうか?今回はこの「::」の意味についてご紹介します。

(1-1) 「::」の意味は?

「::」は「スコープ解決演算子」と呼ばれ、「::」の後に記述される内容(コンストラクタやメソッド等)がどこの「名前空間」や「クラス」に所属するか?を明示的に記述する際に用いる記号です。内部的にはコンパイル時にコンパイラに対して、どの「クラス/名前空間」を見れば良いか?を教えます。
 
例えば、次の例では「Fruits::」が名前空間を表し、「Banana()」がコンストラクタを表しています。
 
(例)
Fruits::Banana()
 
そして、これらを合わせた「Fruits::Banana()」を併せて「修飾名」と呼びます。
 

(1-2) サンプル①:スコープ演算子「::」を使ってグローバル変数にアクセス

最初のサンプルでは「::」を使って変数にアクセスするサンプルをご紹介します。同じ名前「age」のグローバル変数とローカル変数を用意し、グローバルの方は「::age」でアクセスし、ローカルの方は「age」とアクセスしています。つまり「::」はグローバルスコープを表しているという事が確認できます。
 
(サンプル①)
 
#include <iostream>
#include <string>
using namespace std;

//# グローバルな変数
int age = 21;

int main() {
  //# ローカルな変数
  int age = 18;

  cout << "グローバル変数の値:" << ::age << endl;;
  cout << "ローカル変数の値:" << age << endl;;
  return 0;
}
 
(図121)
 

(1-3) サンプル②:スコープ演算子「::」を使って関数にアクセス

次のサンプルでは「::」を使って関数にアクセスするサンプルをご紹介します。同じ名前の関数「calcPrice」をFruitクラスとAppleクラスにそれぞれ定義し、Fruitの方は「Fruit::calcPrice」とアクセスし、Appleの方は「Apple::calcPrice」とアクセスします。これにより「::」の前で指定したクラスに属する関数にアクセスしている事が確認できます。
 
(サンプル②)
#include 
#include 
using namespace std;

//# 親クラス
class Fruit {

  //# 親クラス内のメソッド
  public:
    static void calcPrice(int amount) {
      cout << "フルーツの値段:" << amount * 100 << endl;
    }
};

//# 親クラスを継承したクラス
class Apple : public Fruit {

  //# 親クラスを継承したクラス内のメソッド
  public:
    static void calcPrice(int amount) {
      cout << "リンゴの値段:" << amount * 200 << endl;
    }
};

int main() {

  Fruit::calcPrice(5);
  Apple::calcPrice(5);
  return 0;
}
(図131)
 

(1-4) 補足

「::」の前に何も指定しない場合は「グローバル名前空間」を参照します。例えば「std::cout」を単に「cout」と書いた場合、coutはグローバル名前空間には定義されていないため、エラーになります。あるいは名前空間の使用を宣言(例:「using namespace std;」と記述すれば「std::」を省略する事ができます。
 

Adsense審査用広告コード


Adsense審査用広告コード


-C++

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

C++のtime関数とlocaltime関数の違いについて

  <目次> (1) C++のtime関数とlocaltime関数の違いについて  (1-1) C++のlocaltime関数の概要とサンプル  (1-2) C++のtime関数の概要とサン …

C++のポインタとは?概念や基本的な使い方をご紹介

  <目次> (1) C++のポインタとは?概念や基本的な使い方をご紹介  (1-1) はじめに  (1-2) ポインタとは? (1) C++のポインタとは?概念や基本的な使い方をご紹介 「 …

ValgrindのDefinetely Lostの意味や実際のサンプルをご紹介

  <目次> (1) ValgrindのDefinetely Lostの意味や実際のサンプルをご紹介  (1-1) Valgrindの「Definetely Lost」はどんな状況?  (1 …

C++のマルチスレッド処理のサンプルや概要について

  <目次> (1) C++のマルチスレッド処理のサンプルや概要について  (1-1) C++のマルチスレッドの概要  (1-2) 構文1:関数ポインタ式  (1-3) 構文1(例):関数ポ …

Valgrindで行番号を表示させる方法

  <目次> (1) Valgrindで行番号を表示させる方法  (1-1) 行番号を表示させる方法  (1-2) (参考)「-g」オプションについて (1) Valgrindで行番号を表示 …

  • English (United States)
  • 日本語
Top