クラス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
が初期化されているというわけです」
ソーラー「わぁ それはきづかなかったな(´▽`*)/
そんな仕組みだったんだね」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます