:: は C++ で何をしますか?

Ha C De Hewoshimasuka



C++ は、開発者に幅広い機能を提供する汎用性の高いプログラミング言語です。 C++ で最も一般的に使用される機能の 1 つは、 スコープ解決演算子 、としても知られています 二重コロン (::) .言語の重要な部分であるにもかかわらず、 二重コロン 演算子は、多くの開発者、特に初めて使用する開発者にとって混乱を招く可能性があります。

このガイドでは、 二重コロン (::) 演算子 C++ で、さまざまなシナリオでどのように機能するかを説明します。

:: は C++ で何をしますか?

C++ では、 スコープ解像度 演算子 (::) さまざまなスコープ レベルに存在する変数の名前を取得するために使用されます。プログラミングにおけるスコープとは、変数や関数にアクセスできるコンテキストを指します。







C++ でのさまざまなケースでの :: の使用

C++ では、 スコープ解決演算子 (::) 使われる場面によって様々な用途があります。以下は、この演算子の注目すべき用途の一部です。



1: 別の名前空間で変数または関数にアクセスする

名前空間 名前の競合を避けるために、関連する関数、クラス、および変数をグループ化するために C++ で使用されます。内で変数または関数を定義すると、 名前空間 、変数または関数の名前はその中でのみ表示されます 名前空間 .



C++ では、 スコープ解決演算子 (::) 一緒に 名前空間 name と変数または関数名を使用して、別の名前空間で定義された変数または関数にアクセスします。これにより、変数または関数に 名前空間 それが作成されたもの以外。





上記のケースを理解するために、次のコードを例として考えてみましょう。

#include

名前空間 std の使用 ;

名前空間の計算 {

定数 ダブル PI = 3.14159 ;

ダブル 四角 ( ダブル バツ ) {

戻る バツ * バツ ;

}

}

整数 主要 ( ) {

カウト << 'PI の値は次のとおりです:' << 算数 :: PI << エンドル ;

カウト << 「5 の 2 乗は次のとおりです。」 << 算数 :: 四角 ( 5 ) << エンドル ;

戻る 0 ;

}

上記のコードは、 数学名前空間 にアクセスするには 「ピ」 定数と '四角' を使用した関数 スコープ解決演算子「::」 .次に、値をコンソールに出力します。



出力

2: プログラムでグローバル変数にアクセスする

プログラム内に同じ名前のローカル変数とグローバル変数が存在する場合、ローカル変数がグローバル変数を隠している可能性があります。このような状況では、 スコープ解決演算子 (::) グローバル変数にアクセスするため。この演算子を使用すると、スコープに基づいてグローバル変数を明示的に参照できます。

たとえば、以下のコードでは、グローバル変数を参照しています。 'a '経由で スコープ解決演算子(::) 、同じ名前のローカル変数が定義されている関数内から:

#include

名前空間 std の使用 ;

整数 a = 15 ;

整数 主要 ( )

{

整数 a = 35 ;

カウト << 'グローバル変数 a の値は' << :: a << エンドル ;

カウト << 'ローカル変数 a の値は' << a << エンドル ;

戻る 0 ;

}

上記のコードでは、メイン関数の外側に存在する変数 a は、 グローバル変数 メイン関数内の変数 a は ローカル変数 グローバル変数と同じ名前。 cout ステートメントでは、スコープ解決演算子を使用してグローバル変数を出力しました。 a .

出力

3: クラスの外で関数を定義する

C++ では、クラス定義の外でクラス関数を定義できます。 スコープ解決演算子 (::) 関数が属するクラスを指定します。これは、関数がクラス スコープ外で定義されているために必要です。

以下は、この使用法を示すコード例です。 スコープ解決演算子 :

#include

名前空間 std の使用 ;



クラス myClass {

公共 :

空所 私の機能 ( ) ;

} ;

空所 私のクラス :: 私の機能 ( ) {

カウト << 「myfunction() が呼び出されました!」 ;

}

整数 主要 ( )

{

myClass classObj ;

クラス オブジェクト。 私の機能 ( ) ;

戻る 0 ;

}

上記のコードでは、メンバー関数 myfunction() を使用してクラス外で定義されます。 スコープ解決演算子 :: それを指定する myfunction() myClass クラスに属します。

出力

4: クラスの静的メンバーにアクセスする

C++ では、静的メンバーがあり、同じ名前のローカル変数がクラス内に存在する場合、 スコープ解決演算子 (::) クラスの静的メンバーにアクセスするために使用できます。これにより、プログラムはローカル変数と静的メンバーを区別できます。

の使用に関連するコード例を次に示します。 スコープ解決演算子 そのような場合:

#include

名前空間 std の使用 ;

クラス myClass {

公共 :

静的 整数 myStatVar ;

} ;

整数 私のクラス :: myStatVar = 5 ;

整数 主要 ( ) {

整数 myStatVar = 10 ;

カウト << 'ローカル変数 myStatVar: ' << myStatVar << エンドル ;

カウト << 'クラス変数 myStatVar: ' << 私のクラス :: myStatVar << エンドル ;

戻る 0 ;

}

上記のプログラムは、最初にクラスを定義します 私のクラス 静的メンバー変数で myStatVar .次に、プログラムのメイン関数内で同じ名前のローカル変数を定義します。クラス変数にアクセスするには、 スコープ解決演算子 (::) クラス名で使用されます 私のクラス .プログラムは両方の変数の値をコンソールに出力します。

出力

5: 複数の継承で使用する

スコープ解決演算子 (::) 同じ名前のメンバー変数または関数を持つ複数の親クラスから C++ クラスが派生する場合に、使用するメンバーのバージョンを示すためにも使用されます。を使用して、同じメンバーのさまざまなバージョンを区別できます。 スコープ解決演算子 その後に、親クラス名とメンバーの名前が続きます。

#include

名前空間 std の使用 ;

クラス Parent1 {

公共 :

空所 印刷する ( ) {

カウト << 「これはクラス Parent1 の印刷関数です。」 << エンドル ;

}

} ;

クラス Parent2 {
公共 :
空所 印刷する ( ) {
カウト << 「これはクラス Parent2 印刷関数です。」 << エンドル ;
}
} ;
クラス myClass : 公開の親 1 public Parent2 {
プライベート :
整数 一つに ;

公共 :
私のクラス ( 整数 n ) {
一つに = n ;
}
空所 印刷する ( ) {
親 1 :: 印刷する ( ) ; // Parent1 の印刷関数を呼び出します
親 2 :: 印刷する ( ) ; // Parent2 の印刷関数を呼び出します
カウト << 'num の値:' << 一つに << エンドル ; // num の値を出力します
}
} ;
整数 主要 ( ) {
myClass オブジェクト ( 42 ) ; // num が 42 に初期化された MyClass のオブジェクトを作成します
オブジェクト。 印刷する ( ) ; // オブジェクトの print() 関数を呼び出します
戻る 0 ;
}

上記のプログラムは、 スコープ解決演算子 (::) の印刷機能を区別する 親 1 親 2 両方のクラスが継承されている場合 私のクラス。 で関数を呼び出すことにより、 親クラス 関数名の前に名前を付けると、使用する関数のバージョンを指定できます。

出力

結論

スコープ解決演算子 (::) は、さまざまなスコープ レベルで変数名にアクセスするために使用される C++ の重要なコンポーネントです。演算子には、別の名前空間の変数または関数へのアクセス、グローバル変数へのアクセス、クラス外の関数の定義、クラスの静的メンバーへのアクセス、多重継承の使用など、さまざまな用途があります。新しい開発者は混乱するかもしれませんが、 スコープ解決演算子 (::) 良いプログラミングの練習に不可欠です。