teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2017/11/17 16:34

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -36,6 +36,23 @@
36
36
  デフォルト引数は関数やメソッド、コンストラクタで使えます。
37
37
  クラスの宣言や定義の際に、特殊な何かが発動するわけではないです。
38
38
 
39
+ 一番簡単な例だとこんな感じ。
40
+ ```C++
41
+ #include <iostream>
42
+
43
+ void hoge(int a = 0) {
44
+ std::cout << a << std::endl;
45
+ }
46
+
47
+ int main(void) {
48
+ hoge(1);
49
+ hoge();
50
+ return 0;
51
+ }
52
+ ```
53
+
54
+ 出力は`1 (改行) 0 (改行)`です。
55
+
39
56
  > 「main関数でインスタンスが生成されたとき、引数としてもらった値に0が代入される」
40
57
  という解釈
41
58
 

1

追記

2017/11/17 16:34

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -28,4 +28,25 @@
28
28
  };
29
29
  ```
30
30
 
31
- ですので、実は置き換わっている部分は`=0`のところだけなんです。
31
+ ですので、実は置き換わっている部分は`=0`のところだけなんです。
32
+
33
+ ---
34
+ > クラスの宣言で使う、デフォルト引数について
35
+
36
+ デフォルト引数は関数やメソッド、コンストラクタで使えます。
37
+ クラスの宣言や定義の際に、特殊な何かが発動するわけではないです。
38
+
39
+ > 「main関数でインスタンスが生成されたとき、引数としてもらった値に0が代入される」
40
+ という解釈
41
+
42
+ この場合「コンストラクタが呼び出されたとき、引数が省略されたら0として扱う」ですね。
43
+
44
+ > その後ろの{bs1=b1}の部分は、protectedのint bs1に引数としてもらった値を代入する、
45
+ という式の意味はわかるのですが、ブロックで囲まれているのはなぜでしょうか?
46
+
47
+ 潰して書いているからわかりづらいだけで、本当にただのブロックです。
48
+
49
+ > インスタンスが生成された(引数なしの場合)→b1に0が代入される→()の中が実行?→{}の中が実行?
50
+ > インスタンスが生成された(引数ありの場合)→bs1にb1の値が代入される→{}の中が実行?
51
+
52
+ コンストラクタが呼び出された → 引数が省略されたらb1を0とする → {}の中を実行