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