コンストラクタの引数にデフォルト引数をもちいてみよう。 その1
ソーラー「今度は
コンストラクタの引数をデフォルト引数に設定してみようかな。
まずは次のプログラムをご覧ください。
#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, float b, float c, float d) {
no = a;
tate = b;
yoko = c;
takasa = d;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
}
/*👆🌞🌞🌞コンストラクタ
Cube::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(1,1.0,1.0,1.0);
//👆cube1のクラスCube型のオブジェクト宣言をおこなっています
/*🌞このとき クラス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 cube1(1,1.0,1.0,1.0);
により
aに1
bに1.0
cに1.0
dに1.0
が代入されることになるので
cube1.no=1;
cube1.tate=1.0;
cube1.yoko=1.0;
cube1.takasa=1.0;
が実行され
クラスCube型のオブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
は
1
1.0
1.0
1.0
に初期化されます。
そして
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
が実行されます
🌞*/
cube1.display();
cout << "立方体につけられたナンバーは" << cube1.no << "です" << "\n";
cout << "立方体の縦の長さは" << cube1.tate << "です" << "\n";
cout << "立方体の横の長さは" << cube1.yoko << "です" << "\n";
cout << "立方体の高さの長さは" << cube1.takasa << "です" << "\n";
return 0;
}
プログラムの実行結果
生成されたオブジェクトのメンバ変数を初期化しました
立方体につけられたナンバーは1です
立方体の縦の長さは1です
立方体の横の長さは1です
立方体の高さの長さは1です
立方体につけられたナンバーは1です
立方体の縦の長さは1です
立方体の横の長さは1です
立方体の高さの長さは1です
ソーラー「このプログラムでは
Cubeのクラス宣言内で
クラスCubeのメンバ関数として
クラスCubeのコンストラクタのメンバ関数宣言
Cube(int a, float b, float c, float d);
が
設定されています。
cube1のクラスCube型のオブジェクト宣言
Cube cube1(1,1.0,1.0,1.0);
が実行されると
コンストラクタCube(int a,float b,float c,float d)の定義内の
no = a;
tate = b;
yoko = c;
takasa = d;
の
no
tate
yoko
takasa
に
クラスCubek型のオブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
が代入された
cube1.no=a;
cube1.tate=b;
cube1.yoko=c;
cube1.takasa=d;
が実行されることになります
Cube cube1(1,1.0,1.0,1.0);
により
aに1
bに1.0
cに1.0
dに1.0
が代入されることになるので
cube1.no=1;
cube1.tate=1.0;
cube1.yoko=1.0;
cube1.takasa=1.0;
が実行され
クラスCube型のオブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
は
1
1.0
1.0
1.0
に初期化されます。
そして
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
が実行されます
ところで
ここで
コンストラクタCube(int a,float b,float c,float d)の定義を
Cube::Cube(int a, float b, float c, float d) {
no = a;
tate = b;
yoko = c;
takasa = d;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
}
から
🌞デフォルト引数を用いて🌞
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(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";
}
として
cube1のオブジェクト宣言
Cube cube1(1,1.0,1.0,1.0);
を実行すると
クラス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;
の
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;
が実行されることになる
このとき
デフォルト引数の設定
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;
となり
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
は
0
0.0
0.0
0.0
に初期化されるはずなんだが
cube1のオブジェクト宣言
Cube cube1(1,1.0,1.0,1.0);
の引数部分の設定により
aに1
bに1.0
cに1.0
dに1.0
が代入されることになるとすると
クラスCube型のオブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
は
1
1.0
1.0
1.0
の値を持つことになる
いったい
クラスCube型のオブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
は
0
0.0
0.0
0.0
の値をとることになるのか??
それとも
1
1.0
1.0
1.0
の値をもつことになるのか?」
ソーラー「わ、いいところにきづいたね。
実は
コンストラクタの引数をデフォルト引数に設定して数値データを代入しておいたとしても
オブジェクト宣言が実行されるとき
オブジェクトにつづく引数部分に代入される数値データを
オブジェクトのメンバ変数はもつことになります。
とりあえず
コンストラクタCube(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";
}
とし
main関数内で
cube1のオブジェクト宣言
Cube cube1(1,1.0,1.0,1.0);
を実行してみましょう。
さあ
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
は
0
0.0
0.0
0.0
の値をもつことになるのかな?
それとも
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(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";
}
/*👆🌞🌞🌞コンストラクタの引数をデフォルト引数に設定しています🌞🌞🌞*/
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
//👆クラスCubeのメンバ関数となっている自作関数display()の定義をおこなっています
int main() {
Cube cube1(1,1.0,1.0,1.0);
//👆cube1のクラスCube型のオブジェクト宣言をおこなっています
/*🌞このとき クラスCube型のオブジェクトcube1のコンストラクタが自動的に実行されます
コンストラクタCube(int a,float b,float c,float d)の定義内の
no = a;
tate = b;
yoko = c;
takasa = d;
の
no
tate
yoko
takasa
に
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
が代入された
cube1.no=a;
cube1.tate=b;
cube1.yoko=c;
cube1.takasa=d;
が実行されることになります
そして
デフォルト引数の設定
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;
が実行され
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
は
0
0.0
0.0
0.0
の値をもつことになりそうですが
クラスCube型のオブジェクト宣言
Cube cube1(1,1.0,1.0,1.0);
により
aに1
bに1.0
cに1.0
dに1.0
が代入されることになるので
クラスCube型のオブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
は
1
1.0
1.0
1.0
で初期化されます。
そして
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
が実行されます
🌞*/
cube1.display();
cout << "立方体につけられたナンバーは" << cube1.no << "です" << "\n";
cout << "立方体の縦の長さは" << cube1.tate << "です" << "\n";
cout << "立方体の横の長さは" << cube1.yoko << "です" << "\n";
cout << "立方体の高さの長さは" << cube1.takasa << "です" << "\n";
return 0;
}
プログラムの実行結果
生成されたオブジェクトのメンバ変数を初期化しました
立方体につけられたナンバーは1です
立方体の縦の長さは1です
立方体の横の長さは1です
立方体の高さの長さは1です
立方体につけられたナンバーは1です
立方体の縦の長さは1です
立方体の横の長さは1です
立方体の高さの長さは1です
マックス「クラスCube型のオブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
は
1
1.0
1.0
1.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";
}
で
引数をデフォルト引数に設定していたが
結局
クラスCube型のオブジェクト宣言
Cube cube1(1,1.0,1.0,1.0);
により
int a
float b
float c
float d
に代入される値は
0
0.0
0.0
0.0
でなく
1
1.0
1.0
1.0
になって
クラスCube型のオブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
は
1
1.0
1.0
1.0
をあらわすことになったか・・・
ということは
コンストラクタの引数を
デフォルト引数に設定することに意味はないんじゃないか・・・
と思うんだが?」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます