aのクラスの静的メンバ変数宣言、aのクラスのメンバ変数宣言を両方とも実行することによりクラスのメンバ関数内でクラスの静的メンバ変数を使用することができます

マックス「💡ぴっかぴかぴかりり~ん」


ぶーにゃん「にゃ~んん(´▽`*)」



マックス「


そうだ


int Cube::a;



Cubeのクラス宣言

👇

class Cube{


public:

int no; //変数noはクラスCubeのメンバ変数とよばれます

public:

float tate; //変数tateはクラスCubeのメンバ変数とよばれます

public:

float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます

public:

float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます


public:

Cube();


/*🌞🌞🌞クラスCubeのコンストラクタCube() のメンバ関数宣言を行っています*/


public:

void display(); //自作関数display()のクラスCubeのメンバ関数宣言を行っています


public:

static int a;

/*🌞🌞🌞ここですよ~ん🌞🌞🌞

静的メンバ変数aのCubeのメンバ変数宣言を行っています*/


};


👆


の後、


main関数の前


実行したならば


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


Cube cube1;


を実行して


オブジェクトcube1を作製した場合


生成される


オブジェクトcube1の静的メンバ変数


cube1.aに


cube1.a=0;


のように


直接


数値を代入して


初期化できるようになるわけだ。


int Cube::a;



Cubeのクラス宣言の後、


main関数の前


実行して


はじめて


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


cube1.aが初めて機能するというわけだ



そう


となれば、だ


int Cube::a;


が設定された


この状態ならば


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


void Cube::display() {


a=0;

no = 0;

tate = 0;

yoko = 0;

takasa = 0;


cout << "cube1.aは" <<a<< "に初期化されました" << "\n";

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

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

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

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


}


のように


設定しておけば


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


Cube cube1;


を実行したときに


生成される


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


cube1.display()


を実行して


間接的に


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


cube1.a



0



初期化できるんじゃないか


つまり


もうすこしわかりやすく言い換えると


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


Cube cube1;


を実行すれば


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

cube1.a


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

cube1.no

cube1.tate

cube1.yoko

cube1.takasa


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

cube1.display()


が生成されて使用することができるようになる


そして


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


cube1.display();


を実行すれば


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

👇

void Cube::display() {


a=0;

no = 0;

tate = 0;

yoko = 0;

takasa = 0;


cout << "cube1.aは" <<a<< "に初期化されました" << "\n";

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

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

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

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


}



のブロック内の


a=0;

no = 0;

tate = 0;

yoko = 0;

takasa = 0;


cout << "cube1.aは" <<a<< "に初期化されました" << "\n";

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

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

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

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


a

no

tate

yoko

takasa

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

cube1.a

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

cube1.no

cube1.tate

cube1.yoko

cube1.takasa

が代入されたものが


実行されるはずだろ


そのとき

a

cube1.a


を表すことになるので


クラスCubeのメンバ関数display()の定義のブロック内の


a=0;



cube1.a=0;


となり


間接的に


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


cube1.a



cube1.a=0;



初期化することができるんじゃないか?


そのプログラムを実行だ(´▽`*)


やっぱりぃ 俺ぇ


頭 いいいいいいいいんんんんんんんんんんんんん~~~~~~~~~」


そのプログラムは以下のようになります



👇

#include <iostream>


using namespace std;


class Cube{


public:

int no; //変数noはクラスCubeのメンバ変数とよばれます

public:

float tate; //変数tateはクラスCubeのメンバ変数とよばれます

public:

float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます

public:

float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます


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 << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";


}

/*👆🌞

クラスCubeのコンストラクタCube()の定義を行っています

*/



void Cube::display() {


a=0;

no = 0;

tate = 0;

yoko = 0;

takasa = 0;


cout << "cube1.aは" <<a<< "に初期化されました" << "\n";

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

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

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

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


}



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


int Cube::a;


//🌞🌞🌞ここです aのメンバ変数宣言を実行しました。🌞🌞🌞




int main() {


Cube cube1;


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

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

cube1.display();

return 0;

}


プログラムの実行結果


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

cube1.aは0に初期化されました

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

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

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

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



マックス「やったな(´▽`*)/


ビルド実行に成功したぜ


int Cube::a;



Cubeのクラス宣言の後、


main関数の前


実行したならば


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


cube1.display();

の実行を通して


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


cube1.a



初期化できるってわけだ。」



                 



てんC「そうなんです。


マックスさん


int Cube::a;



Cubeのクラス宣言の後、


main関数の前


実行することにより


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


の定義内で


Cubea


もし


int Cube::a;



Cubeのクラス宣言の後、


main関数の前


実行しなければ


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


void Cube::display() {


a=0;

no = 0;

tate = 0;

yoko = 0;

takasa = 0;


cout << "cube1.aは" <<a<< "に初期化されました" << "\n";

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

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

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

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


}


内で


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


をもちいることはできません。


そのように


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


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


が使用されていると


プログラムの実行時


ビルドエラーが表示されることになります。」


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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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