クラスの静的メンバ変数はそのクラス型のオブジェクトならどのオブジェクトでもアクセスすることができます
静的メンバ変数と普通のメンバ変数は何がちがうのでしょうか?
#include <iostream>
using namespace std;
class Cube{
public:
int no;
public:
float tate;
public:
float yoko;
public:
float takasa;
public:
Cube();
/*🌞🌞🌞クラスCubeのコンストラクタCube() のメンバ関数宣言を行っています*/
public:
void display(); //自作関数display()のクラスCubeのメンバ関数宣言を行っています
public:
static int a;
/*🌞🌞🌞ここですよ~ん🌞🌞🌞
aのCubeの静的メンバ変数宣言を行っています*/
};
Cube::Cube() {
no = 0;
tate = 0.0;
yoko = 0.0;
takasa = 0.0;
cout << "生成されたCube型のオブジェクトのメンバ変数を初期化しました" << "\n";
}
/*👆🌞
クラスCubeのコンストラクタCube()の定義を行っています
🌞*/
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
//👆クラスCubeのメンバ関数となっている自作関数display()の定義をおこなっています
int Cube::a =0;
//👆🌞🌞🌞ここです🌞🌞🌞静的メンバ変数aの初期化を行っています
int main() {
Cube cube1;
//👆cube1のクラスCube型のオブジェクト宣言をおこなっています
/*🌞このとき クラスCube型のオブジェクトcube1のコンストラクタが自動的に実行されています*/
cout << "オブジェクトcube1の静的メンバ変数cube1.aに代入された数値データは" << cube1.a << "です" << "\n";
cout << "立方体につけられたナンバーは" << cube1.no << "です" << "\n";
cout << "立方体の縦の長さは" << cube1.tate << "です" << "\n";
cout << "立方体の横の長さは" << cube1.yoko << "です" << "\n";
cout << "立方体の高さの長さは" << cube1.takasa << "です" << "\n";
return 0;
}
プログラムの実行結果
生成されたCube型のオブジェクトのメンバ変数を初期化しました
オブジェクトcube1の静的メンバ変数cube1.aに代入された数値データは0です
立方体につけられたナンバーは0です
立方体の縦の長さは0です
立方体の横の長さは0です
立方体の高さの長さは0です
ソーラー「
Cubeのクラス宣言内の
aの静的メンバ変数宣言
static int a;
プラス
Cubeのクラス宣言の後
main関数の前で
int Cube::a =0;
を記述することにより
ついに
Cube cube1;
を実行して
クラスCube型のオブジェクトcube1の静的メンバ変数cube1.aを作製し
cube1.aを0に初期化することができました。
int Cube::a =0;
みんな わかったかな?
この
int Cube::a =0;
の0により
クラスCube型のオブジェクトcube1 のメンバ変数
cube1.a
は
0に初期化されています
やったね。」
マックス「そうかそうか
ソーラーよ。
int Cube::a = 0;
を
クラスCubeのクラス宣言の後
main関数の前
で実行することにより
cube1のクラスCube型のオブジェクト宣言
Cube cube1;
を実行して
クラスCube型のオブジェクトcube1を作製したとき
生成されるクラスCube型のオブジェクトcube1の静的メンバ変数cube1.aを
初期化することができたが
別にわざわざ
Cubeのクラス宣言内で
😊aのクラスCubeの静的メンバ変数宣言😊
static int a;
を実行しなくても
普通の
😊aのクラスCubeのメンバ変数宣言😊
int a;
を実行したらいいんじゃないか?
普通の
aのクラスCubeのメンバ変数宣言
int a;
を実行したならば
int Cube::a = 0;
を
クラスCubeのクラス宣言の後
main関数の前
で実行しなくてもよくなるわけだ。
なんでかというと
main関数内で
cube1のクラスCube型のオブジェクト宣言
Cube cube1;
を実行して
クラスCube型のオブジェクトcube1を作製したとき
素直に
クラスCube型のオブジェクトcube1のメンバ変数cube1.aが
生成されるだろ。
そして
cube1.a=0;
と直接、
cube1.aを初期化できるからなあ😊
ところが
静的メンバ変数宣言
static int a;
が
Cubeのクラス宣言内で記述されたならば
main関数の前
Cubeのクラス宣言の後で
int Cube::a = 0;
をおこなわないと
cube1のクラスCube型のオブジェクト宣言
Cube cube1;
を実行しても
クラスCube型のオブジェクトcube1の静的メンバ変数cube1.aが生成されない。
もちろん
cube1.a=0;
と
初期化することはできないわけだ。
明らかに
クラスCubeの静的メンバ変数aより
普通のクラスCubeのメンバ変数aの方が便利だろう。」
ソーラー「つまり
クラスの
静的メンバ変数と
普通のクラスのメンバ変数の違いがどうなっているのか
ということが
皆さんのしりたいところなわけですね。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます