引数をもつタイプのコンストラクタを用いてクラス型の配列宣言により作製されるオブジェクトを自分で設定したいデータで初期化することができます

マックス「う~む


次のプログラムのように



クラスCube型の配列宣言


Cube cube[3];

/*🌞🌞🌞クラスCube型のオブジェクト

cube[0]

cube[1]

cube[2]

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


を行った場合

👇



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


引数をもたないコンストラクタの定義の


no

tate

yoko

takasa


に代入されたものが実行される


つまり


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

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

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

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[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[1]のコンストラクタ

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


が実行されるんだろう?


だったら


クラスCube型の配列宣言


Cube cube[3];

/*🌞🌞🌞クラスCube型の配列をつかってクラスCube型のオブジェクト

cube[0]

cube[1]

cube[2]

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


を行った場合に


自動的に


引数を持つ方のコンストラクタ

👇

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


no = a;

tate = b;

yoko = c;

takasa = d;


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


}



no

tate

yoko

takasa


オブジェクト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::Cube(int a, float b, float c, float d) {


no = a;

tate = b;

yoko = c;

takasa = d;


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


}


no

tate

yoko

takasa


オブジェクト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


が代入されたものを実行することはできないよな」


ソーラー「それには いい方法があるんですよ~


それが


クラス型の配列宣言,初期化と呼ばれるものです。」


マックス「クラス型の配列宣言の初期化?」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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