クラスの静的メンバ変数はそのクラス型のオブジェクトならどのオブジェクトでもアクセスすることができます

静的メンバ変数と普通のメンバ変数は何がちがうのでしょうか?

#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の方が便利だろう。」


ソーラー「つまり


クラスの


静的メンバ変数と


普通のクラスのメンバ変数の違いがどうなっているのか


ということが


皆さんのしりたいところなわけですね。」






  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る