配列を使って複数のオブジェクト宣言をまとめて実行してみましょう。

てんC「みなさん 次のプログラムでは


オブジェクトcube1

オブジェクトcube2

オブジェクトcube3


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

Cube cube1;

Cube cube2;

Cube cube3;


が行われています。


👇


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

Cube cube2;

Cube cube3;

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

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

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

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

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

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

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

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

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

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

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

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

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



return 0;

}



ビルド実行結果


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



てんC「この3つの

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


Cube cube1;

Cube cube2;

Cube cube3;

が実行されると


自動的に


オブジェクトcube1のコンストラクタ

オブジェクトcube2のコンストラクタ

オブジェクトcube3のコンストラクタ


が実行されて


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

cube1.no

cube1.tate

cube1.yoko

cube1.takasa


オブジェクトcube2のメンバ変数

cube2.no

cube2.tate

cube2.yoko

cube2.takasa


オブジェクトcube3のメンバ変数

cube3.no

cube3.tate

cube3.yoko

cube3.takasa

0

0.0

0.0

0.0

初期化されているのが


ビルド実行結果を見ても分かりますね(´▽`*)


この3つの

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


Cube cube1;

Cube cube2;

Cube cube3;



配列をつかって


次のように書き変えることもできます。


Cube cube[3];


👆このように


シンプルになります(*^-^*)/」


マックス「クラスCube型のオブジェクト宣言


Cube cube1;

Cube cube2;

Cube cube3;


のかわりが


Cube cube[3];


で表現されるのか?


これは簡単だな(^_^)/


int a;

int b;

int c;



int str[3]; 


のように配列をつかって


まとめて表記したのと一緒だな(*^-^*)/」



てんC「そうなのです。


クラスCubeの配列宣言


Cube cube[3];


が実行されると


オブジェクトcube[0]

オブジェクトcube[1]

オブジェクトcube[2]


が作製されます。


すると

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


cube[0].no

cube[0].tate

cube[0].yoko

cube[0].takasa

になります


☆  ☆  ☆  ☆  ☆  ☆  ☆


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

cube[0].display()

で表され


cube[0].display();


を実行することもできます

☆  ☆  ☆  ☆  ☆  ☆  ☆


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


cube[1].no

cube[1].tate

cube[1].yoko

cube[1].takasa

になります

☆  ☆  ☆  ☆  ☆  ☆  ☆

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

cube[1].display()

で表され


cube[1].display();


を実行することもできます

☆  ☆  ☆  ☆  ☆  ☆  ☆


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


cube[2].no

cube[2].tate

cube[2].yoko

cube[2].takasa

になります

☆  ☆  ☆  ☆  ☆  ☆  ☆

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

cube[2].display()

で表され


cube[2].display();


を実行することもできます

☆  ☆  ☆  ☆  ☆  ☆  ☆



そして


次のプログラムのように


Cubeのクラス宣言内で


クラスCubeのメンバ関数であるクラスCubeのコンストラクタの


メンバ関数宣言が


Cube();


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

👆

このように2つ行われている場合


main関数内で


クラスCubeの配列宣言


Cube cube[3];

が実行されると


オブジェクトcube[0]

オブジェクトcube[1]

オブジェクトcube[2]


が生成されます


と同時に



          🌞自動的に🌞



   💖💖💖💖💖引数を持たない💖💖💖💖💖ほうの


コンストラクタに


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

cube[0].no

cube[0].tate

cube[0].yoko

cube[0].takasa

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

cube[1].no

cube[1].tate

cube[1].yoko

cube[1].takasa

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

cube[2].no

cube[2].tate

cube[2].yoko

cube[2].takasa

が代入された


オブジェクトcube[0]のメンバ関数であるオブジェクトcube[0]のコンストラクタ

オブジェクトcube[1]のメンバ関数であるオブジェクトcube[1]のコンストラクタ

オブジェクトcube[2]のメンバ関数であるオブジェクトcube[2]のコンストラクタ


が実行されることになります。」


マックス「引数を持たないコンストラクタ・・・


つまり


クラスCubeの配列宣言


Cube cube[3];

の実行と同時に



引数を持たない

👇

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.0;

cube[0].yoko=0.0;

cube[0].takasa=0.0;


が実行され


引数を持たない

👇

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.0;

cube[1].yoko=0.0;

cube[1].takasa=0.0;


が実行され


引数を持たない

👇

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.0;

cube[2].yoko=0.0;

cube[2].takasa=0.0;


が実行されるというわけだ。


すなわち


オブジェクトcube[0]のメンバ関数であるオブジェクトcube[0]のコンストラクタ

オブジェクトcube[1]のメンバ関数であるオブジェクトcube[1]のコンストラクタ

オブジェクトcube[2]のメンバ関数であるオブジェクトcube[2]のコンストラクタ


が実行されるというわけだな。


にゃるほどな。」


てんC「はい😊 このとき


引数を持たないタイプのコンストラクタCube()

👇

Cube::Cube() {


no = 0;

tate = 0.0;

yoko = 0.0;

takasa = 0.0;


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

}

の定義により


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


cube[0].no

cube[0].tate

cube[0].yoko

cube[0].takasa

0

0.0

0.0

0.0

で初期化され


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



ビルド実行結果として表示されることになります。



同様に


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


cube[1].no

cube[1].tate

cube[1].yoko

cube[1].takasa

0

0.0

0.0

0.0

で初期化され


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



ビルド実行結果として表示されることになります。



同様に

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


cube[2].no

cube[2].tate

cube[2].yoko

cube[2].takasa


0

0.0

0.0

0.0

で初期化され


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



ビルド実行結果として表示されることになります。」


ソーラー「ははっ まってたよ


それでは


クラスCube型の配列宣言


Cube cube[3];


を使ったプログラムの実行は僕にまかせてよ。


#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[0]

cube[1]

cube[2]

を作製しています🌞🌞🌞*/

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

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

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

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

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

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

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

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

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

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

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

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



return 0;

}


ビルド実行結果


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


ソーラー「クラスの配列宣言をおこなって


複数のオブジェクトを作成した場合でも


そのオブジェクトのメンバ変数が代入された


オブジェクトのコンストラクタが実行されるんだね。」


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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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