コンストラクタの引数にデフォルト引数をもちいてみよう。 その3

ソーラー「では(*^▽^*)では


次の プログラムをご覧ください。


#include <iostream>


using namespace std;


class Cube{


public:

int no;

public:

float tate;

public:

float yoko;

public:

float takasa;




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(int a = 0, float b = 0.0, float c = 0.0, float d = 0.0) {


no = a;

tate = b;

yoko = c;

takasa = d;


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


}

/*👆🌞🌞🌞クラスのコンストラクタCube::Cubeの引数をデフォルト引数に設定しています🌞🌞🌞*/



void Cube::display() {


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

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

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

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


}


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




int main() {


Cube cube1;


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

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


クラスのコンストラクタCube::Cubeの定義内の


no = a;

tate = b;

yoko = c;

takasa = d;

no

tate

yoko

takasa


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

cube1.no

cube1.tate

cube1.yoko

cube1.takasa

をあらわすことになります。


そして


デフォルト引数の設定


int a=0, float b=0.0, float c=0.0, float d=0.0


により


cube1.no=0;

cube1.tate=0.0;

cube1.yoko=0.0;

cube1.takasa=0.0;


と初期化されます。

そして

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

が実行されます

🌞*/


cube1.display();


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

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

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

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


return 0;

}


ビルド実行結果


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

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

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

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

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

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

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

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

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



ソーラー「このプログラムでは


デフォルト引数


int a = 0

float b = 0.0

float c = 0.0

float d = 0.0


の設定を


クラスのコンストラクタの定義

👇

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


no = a;

tate = b;

yoko = c;

takasa = d;


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


}

引数である

int a

float b

float c

float d

に対して行っていました。


実は


デフォルト引数の設定は


クラスのコンストラクタの定義内の引数に対してでなく


クラスのコンストラクタのメンバ変数宣言


の引数に対して


行うこともできます。


今のプログラムでは


クラスのコンストラクタの定義

👇

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


no = a;

tate = b;

yoko = c;

takasa = d;


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


}


内の引数


int a

float b

float c

float d


デフォルト引数


int a = 0

float b = 0.0

float c = 0.0

float d = 0.0


に設定していました。


それをやめて


クラスのコンストラクタの定義では


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


no = a;

tate = b;

yoko = c;

takasa = d;


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


}


のように


デフォルト引数の設定をおこなわず


代わりに


クラスのコンストラクタのメンバ関数💖💗💖💗💖💗💖宣言で


Cube(int a=0, float b=0.0, float c=0.0, float d=0.0);


のように


int a

float b

float c

float d


デフォルト引数


int a = 0

float b = 0.0

float c = 0.0

float d = 0.0


に設定することができます。


このときの


Cubeのクラス宣言は


class Cube{


public:

int no;

public:

float tate;

public:

float yoko;

public:

float takasa;


public:

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

/*🌞🌞🌞コンストラクタCube(int a,float b,float c,float d)のメンバ関数宣言を行っています


public:

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


};

👆

から

👇へと


class Cube{


public:

int no;

public:

float tate;

public:

float yoko;

public:

float takasa;


public:

Cube(int a=0, float b=0.0, float c=0.0, float d=0.0);


/*🌞🌞🌞コンストラクタCube(int a=0, float b=0.0, float c=0.0, float d=0.0);

のメンバ関数宣言を行っています


ここで

int a

float b

float c

float d

デフォルト引数に設定しました。*/


public:

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


};


と変更されることになります。



このようにデフォルト引数をコンストラクタの定義で行わず


コンストラクタのクラスのメンバ関数宣言で設定しても


先ほどのプログラムと同じビルド実行結果が得られます。


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

👇


#include <iostream>


using namespace std;


class Cube{


public:

int no;

public:

float tate;

public:

float yoko;

public:

float takasa;


public:

Cube(int a = 0, float b = 0.0, float c = 0.0, float d = 0.0);


/*

ここで

int a

float b

float c

float d

デフォルト引数

int a=0;

float b=0.0;

float c=0.0;

float d=0.0;



に設定しました。*/


public:

void display(); //自作関数display()はクラス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;


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

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


コンストラクタCube(int a,float b,float c,float d)の定義内の


no = a;

tate = b;

yoko = c;

takasa = d;

no

tate

yoko

takasa


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

cube1.no

cube1.tate

cube1.yoko

cube1.takasa

をあらわすことになり


cube1.no=a;

cube1.tate=b;

cube1.yoko=c;

cube1.takasa=d;


となります。


ここで


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

Cube(int a = 0, float b = 0.0, float c = 0.0, float d = 0.0);

のデフォルト引数の設定により


aに0

bに0.0

cに0.0

dに0.0

が代入されることになるので


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

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


return 0;

}


プログラムの実行結果


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

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

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

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

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

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

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

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

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


ソーラー「先ほどのプログラムでは


コンストラクタの定義


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


no = a;

tate = b;

yoko = c;

takasa = d;


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


}


内で


int a

float b

float c

float d

デフォルト引数

int a=0;

float b=0.0;

float c=0.0;

float d=0.0;

設定して


プログラムの実行をしていましたが


いまのプログラムのように


コンストラクタのクラスのメンバ関数宣言💖💗💖💗💖💗💖


Cube(int a = 0, float b = 0.0, float c = 0.0, float d = 0.0);


内で


int a

float b

float c

float d

デフォルト引数

int a=0;

float b=0.0;

float c=0.0;

float d=0.0;


に設定してプログラムを実行した場合でも


同じプログラムの実行結果が得られましたね。


マックス「Cubeのクラス宣言内で


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


Cube(int a = 0, float b = 0.0, float c = 0.0, float d = 0.0);


が実行されていると


以下のような引数をもつタイプのオブジェクト宣言


Cube(1,1.0,1.0,1.0);


だけが実行可能と思ったら


引数を持たないオブジェクト宣言


Cube cube1;


も実行できるようじゃないか」


ソーラー「そうなんです(*´▽`*)


今のプログラムをみてもおわかりになられますように


Cubeのクラス宣言内の


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


Cube(int a = 0, float b = 0.0, float c = 0.0, float d = 0.0);


のように


コンストラクタのメンバ関数宣言内で


引数

int a

float b

float c

float d

デフォルト引数

int a=0

float b=0.0

float c=0.0

float d=0.0


に設定した場合でも



    🍋引数部分をもたないオブジェクト宣言🍋



           Cube cube1;



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


今のプログラムのように


Cubeのクラス宣言内の


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


Cube(int a = 0, float b = 0.0, float c = 0.0, float d = 0.0);


のように

引数

int a

float b

float c

float d


         🍓デフォルト引数🍓


          int a=0;

          float b=0.0;

          float c=0.0;

          float d=0.0;


に設定せず


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


のように


コンストラクタのメンバ関数宣言を行い


            なおかつ


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


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


no = a;

tate = b;

yoko = c;

takasa = d;


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


}


のように


引数

int a

float b

float c

float d

         🍓デフォルト引数🍓


              int a=0;

              float b=0.0;

              float c=0.0;

              float d=0.0;


に設定しない場合は



      🍋引数部分をもつタイプのオブジェクト宣言🍋


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


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


      🍋引数部分をもたないタイプのオブジェクト宣言🍋


          Cube cube1;


を実行することはできません(^_-)-☆。」










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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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