回答編集履歴

2

追記

2017/11/17 16:34

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -74,6 +74,40 @@
74
74
 
75
75
 
76
76
 
77
+ 一番簡単な例だとこんな感じ。
78
+
79
+ ```C++
80
+
81
+ #include <iostream>
82
+
83
+
84
+
85
+ void hoge(int a = 0) {
86
+
87
+ std::cout << a << std::endl;
88
+
89
+ }
90
+
91
+
92
+
93
+ int main(void) {
94
+
95
+ hoge(1);
96
+
97
+ hoge();
98
+
99
+ return 0;
100
+
101
+ }
102
+
103
+ ```
104
+
105
+
106
+
107
+ 出力は`1 (改行) 0 (改行)`です。
108
+
109
+
110
+
77
111
  > 「main関数でインスタンスが生成されたとき、引数としてもらった値に0が代入される」
78
112
 
79
113
  という解釈

1

追記

2017/11/17 16:34

投稿

LouiS0616
LouiS0616

スコア35658

test CHANGED
@@ -59,3 +59,45 @@
59
59
 
60
60
 
61
61
  ですので、実は置き換わっている部分は`=0`のところだけなんです。
62
+
63
+
64
+
65
+ ---
66
+
67
+ > クラスの宣言で使う、デフォルト引数について
68
+
69
+
70
+
71
+ デフォルト引数は関数やメソッド、コンストラクタで使えます。
72
+
73
+ クラスの宣言や定義の際に、特殊な何かが発動するわけではないです。
74
+
75
+
76
+
77
+ > 「main関数でインスタンスが生成されたとき、引数としてもらった値に0が代入される」
78
+
79
+ という解釈
80
+
81
+
82
+
83
+ この場合「コンストラクタが呼び出されたとき、引数が省略されたら0として扱う」ですね。
84
+
85
+
86
+
87
+ > その後ろの{bs1=b1}の部分は、protectedのint bs1に引数としてもらった値を代入する、
88
+
89
+ という式の意味はわかるのですが、ブロックで囲まれているのはなぜでしょうか?
90
+
91
+
92
+
93
+ 潰して書いているからわかりづらいだけで、本当にただのブロックです。
94
+
95
+
96
+
97
+ > インスタンスが生成された(引数なしの場合)→b1に0が代入される→()の中が実行?→{}の中が実行?
98
+
99
+ > インスタンスが生成された(引数ありの場合)→bs1にb1の値が代入される→{}の中が実行?
100
+
101
+
102
+
103
+ コンストラクタが呼び出された → 引数が省略されたらb1を0とする → {}の中を実行