クラスCube型の配列宣言 Cube cube[3];をコンストラクタを使って初期化してみます

ソーラー「クラスCube型の配列宣言


Cube cube[3];


の初期化を行いた~い😊


Cube cube[3];


の初期化を行うとはどういうことでしょうか?


Cube cube[3];


の初期化とは


Cube cube[3];


により

生成されるクラスCube型のオブジェクト


cube[0]

cube[1]

cube[2]

のメンバ変数

cube[0].no

cube[0].tate

cube[0].yoko

cube[0].takasa


cube[1].no

cube[1].tate

cube[1].yoko

cube[1].takasa


cube[2].no

cube[2].tate

cube[2].yoko

cube[2].takasa


にデータを代入するということなんです


そこで


cube[0].no

cube[0].tate

cube[0].yoko

cube[0].takasa


cube[1].no

cube[1].tate

cube[1].yoko

cube[1].takasa


cube[2].no

cube[2].tate

cube[2].yoko

cube[2].takasa



コンストラクタを使って初期化したいとします


Cubeのクラス宣言内で


コンストラクタのメンバ関数宣言

Cube();

Cube(int a, float b, float c, float d);


が設定されていて


設定されたコンストラクタの定義が


引数を持たないタイプ

👇

Cube::Cube() {


no = 0;

tate = 0.0;

yoko = 0.0;

takasa = 0.0;


cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";

}

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




引数を持つタイプ


👇

Cube::Cube(int a, float b, float c, float d) {


no = a;

tate = b;

yoko = c;

takasa = d;


cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";


}


の2つがある場合


Cube cube[3];


の初期化を行うには


Cube cube[3]={Cube(),Cube(),Cube()};

Cube cube[3]=

{Cube(),Cube(1,2,3,4) ,Cube()};

Cube cube[3]=

{Cube(5,6,7,8),Cube(9,10,11,12) ,Cube()};



等々・・・😊



と記述する方法があります」


マックス「なんじゃ こりゃあ


クラスCube型の配列宣言


Cube cube[3];



Cubeのクラス宣言内で設定されたコンストラクタで


初期化するってわけか?」


ソーラー「そうなんです😊


Cube cube[3]={Cube(),Cube(1,2,3,4) ,Cube()};



Cube cube[0]=Cube();

Cube cube[1]=Cube(1,2,3,4);

Cube cube[2]=Cube();


と等しい働きをしています


Cube cube[0]=Cube();

Cube cube[1]=Cube(1,2,3,4);

Cube cube[2]=Cube();


は一体どういうことを表しているのでしょうか?


Cube cube[0];


なら


簡単ですね


Cube cube[0];


が実行されると



クラスCube型のオブジェクトcube[0]が生成されます


そのとき


クラスCube型のオブジェクトcube[0]のメンバ変数


cube[0].no

cube[0].tate

cube[0].yoko

cube[0].takasa


も生成されています


Cube cube[0];


が実行されると


引数を持たないコンストラクタCube()が用いられた


クラスCube型のオブジェクトcube[0]のコンストラクタが実行されます


Cube cube[0]=Cube();


とは


Cube cube[0];


が実行されたとき


引数を持たないコンストラクタCube()が用いられた


クラスCube型のオブジェクトcube[0]のコンストラクタが実行されるよう指定しているのです


Cube cube[1]=Cube(1,2,3,4);


とは


Cube cube[1];


が実行されたとき


引数を持つコンストラクタCube(1,2,3,4)が用いられた


クラスCube型のオブジェクトcube[1]のコンストラクタが実行されるよう指定しているのです


Cube cube[2];


が実行されると


引数を持たないコンストラクタCube()が用いられた


クラスCube型のオブジェクトcube[2]のコンストラクタが実行されます


Cube cube[2]=Cube();


とは


Cube cube[2];


が実行されたとき


引数を持たないコンストラクタCube()が用いられた


クラスCube型のオブジェクトcube[2]のコンストラクタが実行されるよう指定しているのです








まず


クラスCube型の配列宣言、初期化が


次のように


Cube cube[3]={Cube(),Cube(),Cube()};


実行された場合について考えてみましょう


Cube cube[3]={Cube(),Cube(),Cube()};


実行されると


クラスCube型のオブジェクト

cube[0]

cube[1]

cube[2]



生成されたと同時に


自動的に


コンストラクタCube()の定義


👇


Cube::Cube() {


no = 0;

tate = 0.0;

yoko = 0.0;

takasa = 0.0;

cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";

}

👆

no

tate

yoko

takasa


オブジェクトcube[0]のメンバ変数


cube[0].no

cube[0].tate

cube[0].yoko

cube[0].takasa


が代入された


cube[0].no=0;

cube[0].tate=0;

cube[0].yoko=0;

cube[0].takasa=0;


が実行され


かつ


自動的に


コンストラクタCube()の定義


👇


Cube::Cube() {


no = 0;

tate = 0.0;

yoko = 0.0;

takasa = 0.0;

cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";

}

👆

no

tate

yoko

takasa


オブジェクトcube[1]のメンバ変数


cube[1].no

cube[1].tate

cube[1].yoko

cube[1].takasa


が代入された


cube[1].no=0;

cube[1].tate=0;

cube[1].yoko=0;

cube[1].takasa=0;


が実行され


かつ


自動的に


コンストラクタCube()の定義


👇


Cube::Cube() {


no = 0;

tate = 0.0;

yoko = 0.0;

takasa = 0.0;

cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";

}

👆

no

tate

yoko

takasa


オブジェクトcube[2]のメンバ変数


cube[2].no

cube[2].tate

cube[2].yoko

cube[2].takasa


が代入された


cube[2].no=0;

cube[2].tate=0;

cube[2].yoko=0;

cube[2].takasa=0;


が実行されます


クラスCube型のオブジェクトcube[0]のコンストラクタ

クラスCube型のオブジェクトcube[1]のコンストラクタ

クラスCube型のオブジェクトcube[2]のコンストラクタ

が実行されて


クラスCube型のオブジェクトcube[0]のメンバ変数

cube[0].no

cube[0].tate

cube[0].yoko

cube[0].takasa

クラスCube型のオブジェクトcube[1]のメンバ変数

cube[1].no

cube[1].tate

cube[1].yoko

cube[1].takasa

クラスCube型のオブジェクトcube[2]のメンバ変数

cube[2].no

cube[2].tate

cube[2].yoko

cube[2].takasa


が初期化されましたね


そのことを示すプログラムはこちらになります。

👇


#include <iostream>


using namespace std;


class Cube{


public:

int no;

public:

float tate;

public:

float yoko;

public:

float takasa;



public:

Cube();

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


public:

Cube(int a, float b, float c, float d);

/*🌞🌞🌞コンストラクタCube(int a,float b,float c,float d)のメンバ関数宣言を行っています🌞🌞🌞*/



public:

void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます


};


Cube::Cube() {


no = 0;

tate = 0.0;

yoko = 0.0;

takasa = 0.0;


cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";

}

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



Cube::Cube(int a, float b, float c, float d) {


no = a;

tate = b;

yoko = c;

takasa = d;


cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";


}

/*👆🌞🌞🌞コンストラクタCube(int a,float b,float c,float d)の定義を行っています🌞🌞🌞*/



void Cube::display() {


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

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

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

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


}


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



int main() {


Cube cube[3] = { Cube(),Cube(),Cube() };

/*🌞🌞🌞クラスCube型の配列宣言をコンストラクタCube()をつかって初期化しています🌞🌞🌞*/



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

cout << "立方体の縦の長さは" << cube[0].tate << "です" << "\n";

cout << "立方体の横の長さは" << cube[0].yoko << "です" << "\n";

cout << "立方体の高さの長さは" << cube[0].takasa<< "です" << "\n";

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

cout << "立方体の縦の長さは" << cube[1].tate << "です" << "\n";

cout << "立方体の横の長さは" << cube[1].yoko<< "です" << "\n";

cout << "立方体の高さの長さは" << cube[1].takasa<< "です" << "\n";

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

cout << "立方体の縦の長さは" << cube[2].tate << "です" << "\n";

cout << "立方体の横の長さは" << cube[2].yoko << "です" << "\n";

cout << "立方体の高さの長さは" << cube[2].takasa << "です" << "\n";


return 0;

}



プログラムの実行結果


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


ソーラー「クラスCube型の配列宣言、初期化


Cube cube[3]={Cube(),Cube(),Cube()};


が実行されて


クラスCube型のオブジェクト

cube[0]

cube[1]

cube[2]



生成されたと同時に


自動的に


クラスCube型のオブジェクトcube[0]のメンバ変数


cube[0].no

cube[0].tate

cube[0].yoko

cube[0].takasa


クラスCube型のオブジェクトcube[1]のメンバ変数


cube[1].no

cube[1].tate

cube[1].yoko

cube[1].takasa


クラスCube型のオブジェクトcube[2]のメンバ変数


cube[2].no

cube[2].tate

cube[2].yoko

cube[2].takasa


コンストラクタCube()の定義の


no

tate

yoko

takasa


に代入された


cube[0].no=0;

cube[0].tate=0.0;

cube[0].yoko=0.0;

cube[0].takasa=0.0;


cube[1].no=0;

cube[1].tate=0.0;

cube[1].yoko=0.0;

cube[1].takasa=0.0;


cube[2].no=0;

cube[2].tate=0.0;

cube[2].yoko=0.0;

cube[2].takasa=0.0;


が実行されています。


つまり

クラスCube型のオブジェクトcube[0]のコンストラクタ

クラスCube型のオブジェクトcube[1]のコンストラクタ

クラスCube型のオブジェクトcube[2]のコンストラクタ

3つのクラスCube型のオブジェクト


cube[0]

cube[1]

cube[2]


のコンストラクタが実行されて


クラスCube型のオブジェクトcube[0]のメンバ変数


cube[0].no

cube[0].tate

cube[0].yoko

cube[0].takasa


クラスCube型のオブジェクトcube[1]のメンバ変数


cube[1].no

cube[1].tate

cube[1].yoko

cube[1].takasa


クラスCube型のオブジェクトcube[2]のメンバ変数


cube[2].no

cube[2].tate

cube[2].yoko

cube[2].takasa


初期化されているのがわかります」



マックス「まさか


コンストラクタで


クラスCube型の配列宣言


Cube cube[3];


を初期化するとはおもわなかったな」


てんC「確かに


Cube cube[3] = { Cube(),Cube(),Cube() };


が実行されると


クラスCube型の配列宣言


Cube cube[3];


によって生成される


クラスCube型のオブジェクトcube[0]のメンバ変数


cube[0].no

cube[0].tate

cube[0].yoko

cube[0].takasa


クラスCube型のオブジェクトcube[1]のメンバ変数


cube[1].no

cube[1].tate

cube[1].yoko

cube[1].takasa


クラスCube型のオブジェクトcube[2]のメンバ変数


cube[2].no

cube[2].tate

cube[2].yoko

cube[2].takasa


自動的に


コンストラクタCube()の定義

no

tate

yoko

takasa


に代入されて


cube[0].no=0;

cube[0].tate=0;

cube[0].yoko=0;

cube[0].takasa=0;


cube[1].no=0;

cube[1].tate=0;

cube[1].yoko=0;

cube[1].takasa=0;


cube[2].no=0;

cube[2].tate=0;

cube[2].yoko=0;

cube[2].takasa=0;


が実行されて


初期化されています。


Cube cube[3]={Cube(),Cube(),Cube()};



Cube cube[0]=Cube();

Cube cube[1]=Cube();

Cube cube[2]=Cube();

が実行されることに等しく


コンストラクタ

Cube()


を使って


クラスCube型のオブジェクトcube[0]のメンバ変数


cube[0].no

cube[0].tate

cube[0].yoko

cube[0].takasa


クラスCube型のオブジェクトcube[1]のメンバ変数


cube[1].no

cube[1].tate

cube[1].yoko

cube[1].takasa


クラスCube型のオブジェクトcube[2]のメンバ変数


cube[2].no

cube[2].tate

cube[2].yoko

cube[2].takasa

が初期化されているというわけです」


ソーラー「わぁ それはきづかなかったな(´▽`*)/


そんな仕組みだったんだね」






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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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