クラス型のオブジェクトの配列宣言をおこなった場合 生成されるオブジェクトのメンバ変数,オブジェクトのメンバ関数ともに機能します

マックス「


クラス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].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() {


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

0

0.0

0.0

0.0

初期化されているんだな



つま~り


いまさらながらだ!


クラスCube型の配列宣言


Cube cube[3];


行った場合



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



ちゃんと


         😸生成されてるってわけだな😊」


solarplexuss「はい・・・?


?????


なぜ??? いまさらですか・・・」 



てんC「そうですね マックスさん」



ソーラー「順調そのもの  だね(^_-)-☆」


マックス「


             🌞だがしかし🌞



ソーラー「


               TVアニメ


             🌞だがしかし🌞  


みなさん、よろしくお願いしま~す。」



てんC「みなさん、よろしくお願いしま~す。(´▽`*)」



マックス「そう


               TVアニメ


            

             🌞だがしかし🌞 


               

           \(^o^)/ばんざい\(^o^)/

                                  」



マックス「ふっ しかたがないな・・・


話がそれたようだな( ̄ー ̄)ニヤリ







クラス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].display()

で表されることになる。


そして

cube[0].display();

を実行することができる。



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

cube[1].display()

で表されることになる


そして

cube[1].display();

を実行することができる。



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

cube[2].display()

で表されることになる。

そして

cube[2].display();


を実行することができる。

☆  ☆  ☆  ☆  ☆  ☆  ☆



マックス「→ってなるんだろう。



☆  ☆  ☆  ☆  ☆  ☆  ☆


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


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

cube[0].no

cube[0].tate

cube[0].yoko

cube[0].takasa

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


の定義

👇

void Cube::display() {


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

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

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

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


}



の中の


no

tate

yoko

takasa


に代入されたもので


cube[0].display()


であらわされます。


そして


cube[0].display();


を実行することができます。


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

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

も同様です


☆  ☆  ☆  ☆  ☆  ☆  ☆


マックス「


cube[0].display();

cube[1].display();

cube[2].display();


👆これらの


オブジェクト

cube[0]

cube[1]

cube[2]

のメンバ関数が実行できたとして


そのことに意味があるのか??」


ソーラー「


cube[0].display();

cube[1].display();

cube[2].display();


が実行できるということの意味ですか?」


マックス「何かに便利に使われるために


クラスCube型の配列宣言


Cube cube[3];


が実行することができるようになっているんだろう?




Cube型のクラス宣言内で


自作関数display()のメンバ関数宣言


void display();


を行い


クラスCubeのメンバ関数となっている自作関数display()の定義


void Cube::display() {


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

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

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

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


}


が設定されている状態で


Cube cube[3];


を実行すると

オブジェクト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].display()


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


cube[1].display()


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


cube[2].display()


も生成される。


Cube型のオブジェクトの配列宣言


Cube cube[3];


を実行するのは


cube[0].display()

cube[1].display()

cube[2].display()


を生成、実行することができるようにするためなんじゃないか?


cube[0].display();

cube[1].display();

cube[2].display();



for文を用いて


for(i;i<4;i++) {


cube[i].display();


}

のように簡単に記述することができるからな 


もし

Cube型のオブジェクト宣言を3つ


Cube a;

Cube b;

Cube c;

を実行すると


オブジェクトのメンバ関数の実行は


a.display();

b.display();

c.display();


となるが


この

a.display();

b.display();

c.display();


for文を用いてまとめることはできないだろう


オブジェクトが今の場合のように3つだったらいいが


オブジェクトが10000個あると


オブジェクトのメンバ関数の実行には


10000個も命令文が必要になっちゃうんじゃないか(*^▽^*)





🌞   🌞   🌞   🌞   🌞   🌞   🌞




配列を作製すると


for文をつかって


便利に


配列変数に格納されたデータを取り扱うことができました。


つまり


クラスCube型の配列宣言


Cube cube[3];


実行すると便利な点は


配列変数とfor文をつかって


オブジェクトのメンバ関数の実行を容易にできる点にあるのですね



より便利に


オブジェクトのメンバ変数に格納されている数値データを取り扱う


ことができるようになるというわけです


                 🐤🐤🐤(ひよひよこ)より

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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