🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2308
おさらい 静的メンバ変数とは何のことでしたでしょうか?グローバル静的(static)変数とはグローバル変数のことです
おさらい 静的メンバ変数とは何のことでしたでしょうか?グローバル静的(static)変数とはグローバル変数のことです
ソーラー「
自作関数内で宣言されたローカル静的(static)変数は
自作関数内でのみ使用することができるローカル変数なのでしたね
その様子を示すプログラムは以下のようになっていました
👇
#include <iostream>
using namespace std;
void f(void) {
static int a = 1;
cout << a << "をとりこみました。\n";
a++;
}
int main() {
int a = 1;/*🌞🌞ここです、ここにint a=1;を持ってきました🌞🌞*/
f();
f();
f();
cout << a << "をとりこみました。\n";
return 0;
}
マックス「
int a = 1;
を
f();
f();
f();
の前にもってきたか・・・
f();
f();
f();
が実行されると
自作関数fのローカルstatic変数aに格納されている値は4となるが
自作関数fのローカルstatic変数aは
main関数のブロック{}内で変数宣言された
変数aとは全く異なる別の変数だ
ということは
別の変数に格納されている値が4になったとしても
main関数のブロック{}内で変数宣言された
変数aに格納されている値は
int a=1;
が実行されたときに格納された数値データ1のまま変化しない
つまり
cout << a << "をとりこみました。\n";
の実行結果は
1をとりこみました
になる
どうだ?」
ソーラー「それでは😊
プログラムの実行結果は・・・
#include <iostream>
using namespace std;
void f(void) {
static int a = 1;
cout << a << "をとりこみました。\n";
a++;
}
int main() {
int a = 1;/*🌞🌞ここです、ここにint a=1;を持ってきました🌞🌞*/
f();
f();
f();
cout << a << "をとりこみました。\n";
return 0;
}
プログラムの実行結果
1をとりこみました。
2をとりこみました。
3をとりこみました。
1をとりこみました。
ソーラー「
それに対し
自作関数内でもmain関数内でも
使用することのできる
グローバル静的(static)変数というものがありましたね」
マックス「??そんなの
あったけか?」
ソーラー「ふふ
とりあえず
次のプログラムをご覧ください」
👇
#include <iostream>
using namespace std;
static int a=1;//👈グローバル静的(static)変数宣言を行っています
void f(void){
cout << a << "をとりこみました。\n";
a++;
}
int main(){
cout << a << "をとりこみました。\n";
f();
a = a + 1;
f();
a = a + 1;
f();
cout << a << "をとりこみました。\n";
return 0;
}
プログラムの実行結果
1をとりこみました。
1をとりこみました。
3をとりこみました。
5をとりこみました。
6をとりこみました。
ソーラー「
このプログラムでは
main関数の外で
aのグローバル静的(static)変数宣言
static int a=1;//👈グローバル静的(static)変数宣言を行っています
を
行っています
この場合
main関数内でも自作関数内でも
共通して
変数a
を使用できるようになります
そして
main関数内で変数aに格納された数値データは
自作関数内の変数aに引き継がれますし
自作関数内で変数aに格納された数値データは
main関数内の変数aに引き継がれます
もちろん
f();が実行されても
グローバル静的(static)変数a
と
グローバル静的(static)変数aに格納されているデータが消えてしまうことはありません
このプログラムでは
static int a=1;
の実行後
main関数内で
cout << a << "をとりこみました。\n";
が実行されていますので
1をとりこみました。
が
コマンドプロンプト画面に表示されます
次に
f();
が実行されて
cout << a << "をとりこみました。\n";
a++;
が実行されて
1をとりこみました。
が
コマンドプロンプト画面に表示されます
このとき
a++;
の働きにより
a の値は2に変化します
f();
の実行により
aの値は2に変化したわけですが
f();
の実行が終了しても
グローバル静的(static)変数aに格納されたデータ2は消去されることなく
そのまま
グローバル静的(static)変数aに保存されることになります
次に
a = a + 1;
が実行されるときも
グローバル静的(static)変数aに保存された数値データ2は引き継がれることになります
a = a + 1;
が実行されると
a の値は2から3に変化します
次に
f();
が実行されると
cout << a << "をとりこみました。\n";
a++;
が実行されて
3をとりこみました。
が
コマンドプロンプト画面に表示されます
このとき
a++;
の働きにより
a の値は4に変化します
次に
a = a + 1;
が実行されると
a の値は5に変化します
次に
f();
が実行されて
cout << a << "をとりこみました。\n";
a++;
が実行されて
5をとりこみました。
が
コマンドプロンプト画面に表示されます
このとき
a++;
の働きにより
a の値は6に変化します
最後に
cout << a << "をとりこみました。\n";
が実行されて
6をとりこみました。
が
コマンドプロンプト画面に表示されます
マックス「
main関数の外で
aのグローバル静的(static)変数宣言
static int a=1;//👈グローバル静的(static)変数宣言を行っています
を
を実行すると
main関数内でも自作関数内でも
共通して
変数a
を使用できるようになるって・・・?
どっかで聞いたような・・・??」
ソーラー「そうなんです
main関数の外で
aのグローバル変数宣言
int a=1;//👈グローバル変数宣言を行っています
を
を実行すると
main関数内でも自作関数内でも
共通して
変数a
を使用できるようになりました
つまり
aのグローバル静的(static)変数宣言
static int a=1;//👈グローバル静的(static)変数宣言を行っています
と
aのグローバル変数宣言
int a=1;//👈グローバル変数宣言を行っています
は
同じ働きをしていることになります
(aのグローバル静的(static)変数宣言
static int a=1;//👈グローバル静的(static)変数宣言を行っています
と
aのグローバル変数宣言
int a=1;//👈グローバル変数宣言を行っています
は全く同じことをしているのかというとそうではありません
aのグローバル静的(static)変数宣言
static int a=1;//👈グローバル静的(static)変数宣言を行っています
と
aのグローバル変数宣言
int a=1;//👈グローバル変数宣言を行っています
では違いがあるのですが
そのことについては別のエピソードでのお話になります)
先程のプログラムの
aのグローバル静的(static)変数宣言
static int a=1;
を
aのグローバル変数宣言
int a=1;
に置き換えても全く同じプログラムの実行結果になります
そのプログラムはこちらです
👇
#include <iostream>
using namespace std;
int a = 1;
void f(void) {
cout << a << "をとりこみました。\n";
a++;
}
int main() {
cout << a << "をとりこみました。\n";
f();
a = a + 1;
f();
a = a + 1;
f();
cout << a << "をとりこみました。\n";
return 0;
}
プログラムの実行結果
1をとりこみました。
1をとりこみました。
3をとりこみました。
5をとりこみました。
6をとりこみました。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます