自作関数の中でオブジェクト宣言が実行されオブジェクトが生成された場合も自動的にそのオブジェクトのコンストラクタは実行されることになります

ソーラー「main関数内で


オブジェクト宣言が行われ


オブジェクトが作製されると


自動的に


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


コンストラクタの定義に代入された


オブジェクトのコンストラクタが実行されました😊


となると


自作関数の定義内でオブジェクト宣言が行われていて


main関数内で


自作関数が実行された場合は


オブジェクトのコンストラクタは実行されることになるのかな?


自作関数が実行されると


オブジェクト宣言が実行されることにより


オブジェクトが生成されることになるのだから


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


コンストラクタの定義に代入された


オブジェクトのコンストラクタが実行されそうだけど


どうなるかな?」


マックス「それは・・・どうかな


実行されるんじゃないか?」


てんC「それでは


次のようなクラスCube



自作関数newmadefunctionを用意してみます


クラスCubeのクラス宣言と


クラスCubeのメンバ関数とクラスのコンストラクタの定義は


以下のように設定します」

👇

class Cube{


public:

int no;

public:

float tate;

public:

float yoko;

public:

float takasa;



public:

Cube();

//🌞🌞🌞コンストラクタのメンバ関数宣言を行っています🌞🌞🌞


public:

void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます



};



Cube::Cube() {


no = 0;

tate = 0.0;

yoko = 0.0;

takasa = 0.0;


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

}

//👆🌞🌞🌞コンストラクタの定義を行っています🌞🌞🌞


void Cube::display() {


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

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

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

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


}


//👆クラスCubeのメンバ関数となっている自作関数display()の定義をおこなっています


てんC「さらに


自作関数newmadefunction()の定義を

👇

void newmadefunction() {


Cube a;

a.display();


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

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

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

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


}


のように設定します


自作関数newmadefunctionが実行されると


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


Cube a;


が実行され


クラスCube型のオブジェクトaが生成されることになりますが


このとき


クラスCube型のオブジェクトaのコンストラクタは実行されるのでしょうか?


そして


クラスCube型のオブジェクトaのコンストラクタが実行されたなら


つまり


クラスCube型のオブジェクトaのメンバ変数

a.no

a.tate

a.yoko

a.takasa



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

👇

Cube::Cube() {


no = 0;

tate = 0.0;

yoko = 0.0;

takasa = 0.0;


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

}



no

tate

yoko

takasa


に代入された


a.no= 0;

a.tate = 0.0;

a.yoko= 0.0;

a.takasa= 0.0;


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


が実行されて


クラスCube型のオブジェクトaのメンバ変数

a.no

a.tate

a.yoko

a.takasa

0

0.0

0.0

0.0

に初期化されるのでしょうか?


そのプログラムを実行してみたいと思います」

👇

#include <iostream>


using namespace std;


class Cube{


public:

int no;

public:

float tate;

public:

float yoko;

public:

float takasa;



public:

Cube();

//🌞🌞🌞コンストラクタのメンバ関数宣言を行っています🌞🌞🌞


public:

void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます


};



Cube::Cube() {


no = 0;

tate = 0.0;

yoko = 0.0;

takasa = 0.0;


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

}

//👆🌞🌞🌞コンストラクタの定義を行っています🌞🌞🌞


void Cube::display() {


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

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

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

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


}


//👆クラスCubeのメンバ関数となっている自作関数display()の定義をおこなっています


void newmadefunction() {


Cube a;

a.display();


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

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

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

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


}


int main() {


Cube cube1;


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

/*🌞このとき クラスCube型のオブジェクトcube1のコンストラクタが自動的に実行されています


クラスCube型のオブジェクトのメンバ変数

cube1.no

cube1.tate

cube1.yoko

cube1.takasa

0

0.0

0.0

0.0

に初期化されます。

そして

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

が実行されます

🌞*/


cube1.display();


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

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

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

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


newmadefunction();


return 0;

}


プログラムの実行結果


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


マックス「自作関数が実行されて


クラスCube型のオブジェクトaが生成されたときも


クラスCube型のオブジェクトaのコンストラクタが実行されている!


なんと


自作関数が実行されてオブジェクトが生成される場合でも


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


実行されるのか~い」




ほんと驚きです



             solarplexussより

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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