🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
コンストラクタのクラスのメンバ関数宣言内と クラスのコンストラクタの定義内で デフォルト引数を2重に設定することはできません
コンストラクタのクラスのメンバ関数宣言内と クラスのコンストラクタの定義内で デフォルト引数を2重に設定することはできません
つづきです。
マックス「
コンストラクタのクラス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のコンストラクタの定義
Cube::Cube(int a=5, float b=5.0, float c=5.0, float d=5.0) {
no = a;
tate = b;
yoko = c;
takasa = d;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
}
内で
引数
int a
float b
float c
float d
を
デフォルト引数
int a=5
float b=5.0
float c=5.0
float d=5.0
に設定したとするだろぉ
つまり
コンストラクタのクラスCubeのメンバ関数宣言内と
Cubeコンストラクタの定義内で
異なる値が代入されるデフォルト引数を設定するわけだ。
この状態で
cube1のクラスCube型のオブジェクト宣言
Cube cube1;
を実行すると
cube1のクラスCube型のオブジェクト宣言
Cube cube1;
によって作製された
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
が
クラスのコンストラクタの定義
Cube::Cube(int a=5, float b=5.0, float c=5.0, float d=5.0) {
no = a;
tate = b;
yoko = c;
takasa = d;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
}
内の
no
tate
yoko
takasa
に代入されたものが実行される。
つまり
👇
〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇
cube1.no = a;
cube1.tate = b;
cube1.yoko = c;
cube1.takasa = d;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇
が実行されることになるわけだが
だが・・・だ
クラスのコンストラクタの定義
Cube::Cube(int a=5, float b=5.0, float c=5.0, float d=5.0) {
no = a;
tate = b;
yoko = c;
takasa = d;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
}
では
int a
float b
float c
float d
は
デフォルト引数
int a=5
float b=5.0
float c=5.0
float d=5.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
に設定されていただろ
じゃあ
結局
cube1.no = a;
cube1.tate = b;
cube1.yoko = c;
cube1.takasa = d;
の
a
b
c
d
に代入されるのは
5
5.0
5.0
5.0
なのか
それとも
0
0.0
0.0
0.0
になるのか
わからなくないか~」
てんC「マックスさん 鋭い!」
マックス「にゃはははははははははあはは
そうだろ
そぉうだろ~~~~~~~~~
俺って偉大だよなぁ~~~~~~~」
てんC「はい😊マックスさん」
ソーラー「ぐふぅぅぅぅぅぅぅ
なぜ
ここに気づかなかったのかぁぁ
あああああああ
聡明な 聡明な
僕の見せ場があぁぁぁぁぁぁ」
マックス「さあ
てんCよ
今 厳かに
コンストラクタのクラスCubeのメンバ関数宣言
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
を
デフォルト引数
int a=0
float b=0.0
float c=0.0
float d=0.0
に設定し
クラスCubeのコンストラクタの定義
Cube::Cube(int a=5, float b=5.0, float c=5.0, float d=5.0) {
no = a;
tate = b;
yoko = c;
takasa = d;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
}
のように
クラスCubeのコンストラクタの定義内で
引数
int a
float b
float c
float d
を
デフォルト引数
int a=5
float b=5.0
float c=5.0
float d=5.0
に設定し
cube1のクラスCube型のオブジェクト宣言
Cube cube1;
を実行することにより
クラスCube型のオブジェクトcube1のコンストラクタを
実行するのだぁ」
てんC「はい😊 かしこまりました
それでは
プログラムを実行します。」
#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);
/*🌞🌞🌞コンストラクタCube::Cube(int a=0, float b =0, float c =0, float d =0) のクラスCubeのメンバ関数宣言を行っています
ここでまず
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=5.0, float b = 5.0, float c = 5.0, float d = 5.0) {
no = a;
tate = b;
yoko = c;
takasa = d;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
}
/*👆🌞🌞🌞
コンストラクタCube(int a=5.0, float b = 5.0, float c = 5.0, float d = 5.0) の定義を行っています
ここで
int a
float b
float c
float d
を
int a =5.0
float b = 5.0
float c = 5.0
float d = 5.0
のように
デフォルト引数に設定しました。
🌞🌞🌞*/
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
//👆クラスCubeのメンバ関数となっている自作関数display()の定義をおこなっています
int main() {
Cube cube1;
//👆cube1のクラスCube型のオブジェクト宣言をおこなっています
/*🌞このとき クラスCube型のオブジェクトcube1のコンストラクタが自動的に実行されることになります
クラスCubeのコンストラクタCube::Cube(int a=5.0, float b = 5.0, float c = 5.0, float d = 5.0)の定義内の
no = a;
tate = b;
yoko = c;
takasa = d;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
が実行されることになりますが
このとき
no = a;
tate = b;
yoko = c;
takasa = d;
の
no
tate
yoko
takasa
は
オブジェクトcube1のメンバ変数
cube1.no
cube1.tate
cube1.yoko
cube1.takasa
をあらわすことになります。
*/
cube1.display();
cout << "立方体につけられたナンバーは" << cube1.no << "です" << "\n";
cout << "立方体の縦の長さは" << cube1.tate << "です" << "\n";
cout << "立方体の横の長さは" << cube1.yoko << "です" << "\n";
cout << "立方体の高さの長さは" << cube1.takasa << "です" << "\n";
return 0;
}
プログラムの実行結果
エラー C2572 'Cube::Cube' : 既定引数の再定義: パラメーター 4
エラー C2572 'Cube::Cube' : 既定引数の再定義: パラメーター 3
エラー C2572 'Cube::Cube' : 既定引数の再定義: パラメーター 2
エラー C2572 'Cube::Cube' : 既定引数の再定義: パラメーター 1
マックス「既定引数の再定義か・・・
ははは なるほど
コンストラクタのクラスのメンバ関数宣言
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=5, float b=5.0, float c=5.0, float d=5.0) {
no = a;
tate = b;
yoko = c;
takasa = d;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
}
内で
引数
int a
float b
float c
float d
を
デフォルト引数
int a=5
float b=5.0
float c=5.0
float d=5.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) {
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;
に設定するというように
同じ変数宣言を用いてデフォルト引数を設定することはできません。
つまり
そもそも変数宣言の再設定をすることはできないのですね。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます