スコープとは変数や関数の有効範囲のことを指しています。
もし、この有効範囲内に同名の変数や関数がある場合は、スコープ解決演算子を
使います。^^
ローカル変数とグローバル変数の名前が同じとき、関数内ではローカル変数が
優先されます。これはなんとなくイメージできるのではないでしょうか?
しかし、スコープ解決演算子を使うことで、グローバル変数を優先させることが
できるようになります。
例えばこんな風に使われます。
//:: がスコープ解決演算子です。
::myname; //グローバル変数の myname にアクセスします
そして、スコープ解決演算子の前にクラス名をつけると、オブジェクト内のメンバ変数を
使うということが明示できます。
//Personクラスのオブジェクトにあるメンバ変数のmynameにアクセスします。^^
Person::myname;
スコープ解決演算子を使ったサンプルプログラム
#include <iostream>
#include <string.h>
using namespace std;
char myname[] = "グローバル時代を席巻するジェイムズ";
class Person{
public:
Person();
private:
char myname[64];
};
Person::Person()
{
char myname[] = "ローカルエリアネットワークにいるジェイムズ";
strncpy(Person::myname, "パーソンクラスにいるジェイムズ",
sizeof("パーソンクラスにいるジェイムズ"));
//ローカル変数
cout << "My name is " << myname << endl;
//メンバ変数
cout << "My name is " << Person::myname << endl;
//グローバル変数
cout << "My name is " << ::myname << endl;
}
int main(void)
{
Person myPerson;
return 0;
}
実行結果
# ./test
My name is ローカルエリアネットワークにいるジェイムズ
My name is パーソンクラスにいるジェイムズ
My name is グローバル時代を席巻するジェイムズ
何故ジェイムズだったのかというと、今日の名言に登場するからです(^_^;)
また、スコープ解決演算子は、関数やオブジェクトへアクセスする時にも
同じように使います。
とても便利ですね、スコープ解決演算子(^^)
例
//グローバル関数(メンバ関数以外)のGetPersonAge()関数にアクセスします。
::GetPersonAge();
今日の名言
年をとれば額にしわがよるのは仕方がないが、心にまでしわを作ってはならない。
ジェイムズ・A・ガーフィールド
人生において重要なことは、大きな目標を持つとともに、それを達成できる
能力と体力を持つことである。
ヨハン・ウォルフガング・フォン・ゲーテ
自分のことで卑屈になったり、引っ込み思案になったりしがちなのを克服する
最上の方法は、他人に興味を持ち、他人のことを考えることだ。気後れなど
うその様に消え去ってしまう。他人のために何か尽くしてやることだ。常に人に
親切を尽くし、友人のような心で接すれば、あなたはそのすばらしい結果に
驚くことだろう。
デール・カーネギー
熱中する心がなければ、この世に進歩はありえない。
ウッドロー・ウィルソン