クラスのメンバ関数であるクラスのコンストラクタを2つ設定して2つの異なるオブジェクトを作成してみよう

ソーラー「みんな またまたもどりますよ。


Cubeのクラス宣言内で


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


Cube();


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


を両方とも記述してみたいと思います。


そのときの


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


Cube::Cube() {


no = 0;

tate = 0.0;

yoko = 0.0;

takasa = 0.0;


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

}


と設定し


引数を持つタイプのコンストラクタの定義は


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


no = a;

tate =b;

yoko =c;

takasa =d;


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


}

と設定します。


この場合


次のプログラムで示されるように


オブジェクトcube1を作製する


cube1のオブジェクト宣言


Cube cube1;

Cube cube1(1,1.0,1.0,1.0);



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

Cube cube1(1,1.0,1.0,1.0);


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


ビルド実行結果はどうなるのでしょうか🌞🌞🌞*/



cube1.display();


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

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

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

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


return 0;

}


ビルド実行結果

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態

エラー C2374 'cube1': 再定義されています。2 回以上初期化されています。 Project8 c:\users\solarplexuss\source\repos\project8\project8\source.cpp 72


マックス「なぁんだ さっきのエピソードの繰り返しじゃないか」


ソーラー「確かに


オブジェクトcube1を作製する


cube1のオブジェクト宣言


Cube cube1;

Cube cube1(1,1.0,1.0,1.0);



2つ同時に実行することはできませんでしたが


オブジェクトcube1💖💖を作製する


cube1のオブジェクト宣言


Cube cube1;



オブジェクトcube2💖💖を作製する


cube2のオブジェクト宣言


Cube cube2(1,1.0,1.0,1.0);


を同時に実行することはできるんです😊


そのプログラムはこちらになります。👇」



#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(1,1.0,1.0,1.0);


/*🌞🌞🌞cube1とcube2のクラス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";




return 0;

}


ビルド実行結果


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

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

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

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

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

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

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

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

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

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


マックス「ちゃんと


cube1とcube2のオブジェクト宣言


Cube cube1;

Cube cube2(1,1.0,1.0,1.0);


実行できているじゃないか


しかも


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


オブジェクトcube2のコンストラクタが実行されて


ビルド実行結果の始めに


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

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


が表示され


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa



0

0.0

0.0

0.0


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


cube1.no

cube1.tate

cube1.yoko

cube1.takasa



1

1.0

1.0

1.0

初期化されている。


同時に


2つの異なるオブジェクトのオブジェクト宣言は可能ってわけだ。


ていうか

コンストラクタの定義が1つしかなくても


コンストラクタの定義が2つでも


もともと


オブジェクト名が


cube1

cube2

のように

異なっていれば


オブジェクト宣言


Cube cube1;

Cube cube2;


を同時に実行して


オブジェクト


cube1

cube2


作製することは可能じゃなかったか?」


ソーラー「あ😊そうだった  いまさ~らでしたぁ\(´▽`*)/」




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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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