クラスの静的メンバ変数aはクラスのメンバ関数の定義に用いることができます。

ソーラー「クラスの静的メンバ変数の仕組みが分かったところで


次のプログラムをみてほしいな。



#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;

yoko = 0;

takasa = 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 = 1;



//👆🌞🌞🌞ここです🌞🌞🌞静的メンバ変数aの初期化を行っています


int main() {


Cube cube1;


//👆cube1のクラスCube型のオブジェクト宣言をおこなっています

/*🌞このとき オブジェクトcube1のコンストラクタが自動的に実行されています*/


cout << "オブジェクトcube1の静的メンバ変数cube1.aに代入された数値データは" << cube1.a << "です" << "\n";


cube1.display();


return 0;

}


ビルド実行結果


生成されたクラスCube型のオブジェクトのメンバ変数を初期化しました

オブジェクトcube1の静的メンバ変数cube1.aに代入された数値データは1です

立方体につけられたナンバーは0です

立方体の縦の長さは0です

立方体の横の長さは0です

立方体の高さの長さは0です


ソーラー「このプログラムでは


Cube cube1;


の実行により


クラスCube型のオブジェクトcube1の静的メンバ変数


cube1.a


クラスCube型のオブジェクトcube1のメンバ変数


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


が生成されています



int Cube::a = 1;


により


クラスCube型のオブジェクトcube1の静的メンバ変数

cube1.a

の値は1になっているので


cout << "オブジェクトcube1の静的メンバ変数cube1.aに代入された数値データは" << cube1.a << "です" << "\n";


が実行されると


クラスCube型のオブジェクトcube1の静的メンバ変数cube1.aに代入された数値データは1です



コマンドプロンプト画面に表示されることになります


次に


クラスCube型のオブジェクトcube1のメンバ関数


cube1.display();


が実行されています


つまり


cube1のクラスCube型のオブジェクト宣言


Cube cube1;


によって作製された


クラスCube型のオブジェクトcube1のメンバ変数


cube1.no

cube1.tate

cube1.yoko

cube1.takasa



クラスCubeのメンバ関数display()の定義


void Cube::display() {


cout << "立方体につけられたナンバーは" << no << "です" << "\n";

cout << "立方体の縦の長さは" << tate << "です" << "\n";

cout << "立方体の横の長さは" << yoko << "です" << "\n";

cout << "立方体の高さの長さは" << takasa << "です" << "\n";


}



no

tate

yoko

takasa


に代入された


cout << "立方体につけられたナンバーは" <<cube1.no << "です" << "\n";

cout << "立方体の縦の長さは" <<cube1.tate << "です" << "\n";

cout << "立方体の横の長さは" <<cube1.yoko << "です" << "\n";

cout << "立方体の高さの長さは" <<cube1.takasa << "です" << "\n";



実行されています。


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


にはコンストラクタによって


0

0.0

0.0

0.0


が代入されているので


立方体につけられたナンバーは0です

立方体の縦の長さは0です

立方体の横の長さは0です

立方体の高さの長さは0です


が表示されることになります



次に


クラスCubeのメンバ関数display()の定義を


void Cube::display() {


cout << "立方体につけられたナンバーは" << no << "です" << "\n";

cout << "立方体の縦の長さは" << tate << "です" << "\n";

cout << "立方体の横の長さは" << yoko << "です" << "\n";

cout << "立方体の高さの長さは" << takasa << "です" << "\n";


}


から


静的メンバ変数aを用いた


void Cube::display() {


cout <<a << "回目のオブジェクトのメンバ関数を実行しました" << "\n";

cout << "立方体につけられたナンバーは" << no << "です" << "\n";

cout << "立方体の縦の長さは" << tate << "です" << "\n";

cout << "立方体の横の長さは" << yoko << "です" << "\n";

cout << "立方体の高さの長さは" << takasa << "です" << "\n";


}


に変更して


プログラムを実行してみます。」


#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 <<a << "回目のオブジェクトのメンバ関数を実行しました" << "\n";

cout << "立方体につけられたナンバーは" << no << "です" << "\n";

cout << "立方体の縦の長さは" << tate << "です" << "\n";

cout << "立方体の横の長さは" << yoko << "です" << "\n";

cout << "立方体の高さの長さは" << takasa << "です" << "\n";


}


//👆クラスCubeのメンバ関数となっている自作関数display()の定義をおこなっています


int Cube::a = 1;



//👆🌞🌞🌞ここです🌞🌞🌞静的メンバ変数aの初期化を行っています


int main() {


Cube cube1;


//👆cube1のクラスCube型のオブジェクト宣言をおこなっています

/*🌞このとき オブジェクトcube1のコンストラクタが自動的に実行されています*/


cout << "オブジェクトcube1の静的メンバ変数cube1.aに代入された数値データは" << cube1.a << "です" << "\n";


cube1.display();


return 0;

}



生成されたクラスCube型のオブジェクトのメンバ変数を初期化しました

オブジェクトcube1の静的メンバ変数cube1.aに代入された数値データは1です

1回目のオブジェクトのメンバ関数を実行しました

立方体につけられたナンバーは0です

立方体の縦の長さは0です

立方体の横の長さは0です

立方体の高さの長さは0です


ソーラー「このプログラムでも


クラスCube型のオブジェクトcube1のメンバ関数


cube1.display();


が実行されています(´▽`*)



cube1のクラスCube型のオブジェクト宣言


Cube cube1;


によって作製された


クラスCube型のオブジェクトcube1の静的メンバ変数


cube1.a


クラスCube型のオブジェクトcube1のメンバ変数

cube1.no

cube1.tate

cube1.yoko

cube1.takasa



クラスCubeのメンバ関数display()の定義


void Cube::display() {


cout <<a << "回目のオブジェクトのメンバ関数を実行しました" << "\n";

cout << "立方体につけられたナンバーは" << no << "です" << "\n";

cout << "立方体の縦の長さは" << tate << "です" << "\n";

cout << "立方体の横の長さは" << yoko << "です" << "\n";

cout << "立方体の高さの長さは" << takasa << "です" << "\n";


}


a

no

tate

yoko

takasa


に代入された


cout <<cube1.a << "回目のオブジェクトのメンバ関数を実行しました" << "\n";

cout << "立方体につけられたナンバーは" <<cube1.no << "です" << "\n";

cout << "立方体の縦の長さは" <<cube1.tate << "です" << "\n";

cout << "立方体の横の長さは" <<cube1.yoko << "です" << "\n";

cout << "立方体の高さの長さは" <<cube1.takasa << "です" << "\n";



が実行されているというわけです(´▽`*)」



マックス「普通に


クラスCubeの静的メンバ変数aを


クラスCubeのメンバ関数の定義内に用いることができたな。


クラスCubeの静的メンバ変数も


クラスCubeのメンバ変数と同様に


クラスCubeのメンバ関数の定義内に用いることができるってわけか(´▽`*)。


まあ


普通といえば


普通のことだったか


っていうか


前のエピソードでやってこなかったか?」


ソーラー「びくぅ」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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