コンストラクタのクラスのメンバ関数宣言内と クラスのコンストラクタの定義内で デフォルト引数を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;


に設定するというように


         同じ変数宣言を用いてデフォルト引数を設定することはできません。


つまり


         そもそも変数宣言の再設定をすることはできないのですね。




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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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