![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
メンバイニシャライザリストのかっこの中に値を書くと、その値でメンバが初期化されるそうですが、かっこの中には、そのメンバのコンストラクタの引数以外も書くことができるのでしょうか?
例えば以下のようなクラスを考えます。
class Token_stream{
public:
Token_stream():full(false), buffer(0){}
・・・
private:
bool full;
Token buffer;
};
class Token{
public:
char kind;
double value;
Token(char ch):kind(ch), value(0){}
Token(char ch, double val):kind(ch), value(val){}
};
クラスToken_streamのコンストラクタのメンバイニシャライザリストはfull(false), buffer(0)となっていますが、full(false)はfullの型がboolだから理解できます。ところがbuffer(0)という記述が理解できません。bufferの型はTokenです。Tokenオブジェクトを0で初期化できるのでしょうか?
No.4
- 回答日時:
AAA(char ch):value(0){}
とchar型で入ってますよね?
そしたら、char型としてcoutには処理されますよね。
先程お書きになった
class BBB{
public:
BBB():aaa(0){}
AAA aaa;
};
のところを
class BBB{
public:
BBB():aaa('a'){}
AAA aaa;
};
と書いてみたらどうなりますか?
#3の回答通り、aaa(0)だと、文字コードの0で表現される文字である、ヌル文字が引数だと解釈されます。
よくわからないなら、これが何と表示されるかみてみると良いでしょう。
char c = 0;
cout << c << endl;
c = '0'だと0という文字の文字コード(ASCIIコードでは48)が代入されていて、
c = 0だと文字コード番号0の値であるヌル文字が代入されますので、
cに代入された値は異なります。
これもよくわからないならやってみると良いでしょう。
char c = '0';
cout << c << endl;
No.1
- 回答日時:
Tokenのコンストラクタにはこういうのがあるようですが...
Token(char ch):kind(ch), value(0){}
例えば、
Token token(0);
というのは上記のコンストラクタが処理してくれることを考えると、書けますよね。
この回答への補足
試しに以下のようなプログラムを書いて実行してみました。
#include <iostream>
using namespace std;
class AAA{
public:
AAA(char ch):c(ch){}
char c;
};
class BBB{
public:
BBB():aaa(0){}
AAA aaa;
};
int main(){
BBB bbb;
cout << bbb.aaa.c << '\n';
return 0;
}
実行結果は改行が表示されただけでした。では、0と表示されないのはなぜですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- JavaScript プログラムがうまく動きませんレビューお願いします 1 2022/07/10 05:08
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript Google reCAPTCHAについて 1 2023/02/22 14:37
- 英語 Alert Failed to get push token for push notificati 1 2023/05/05 09:21
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
「#undef」と「#define」の使い...
-
long型のデータをバイト型の配...
-
構造体のデータを丸ごとコピー...
-
charとucharの違い
-
C++ 構造体の一括初期化 {0}
-
VBAにてcolorindexを変数に格納...
-
命名規則 VB 構造体
-
構造体を型の異なる構造体に代入
-
構造体のポインタにNULLが入らない
-
日付チェック関数について
-
値が代入されてない時
-
typedefをプログラム中で解除す...
-
C言語のキャストについて
-
変数の一括代入
-
整数から16進数への変換 現在c...
-
ユーザー定義型変数の一括初期化
-
C言語 構造体の中に共用体を定...
-
charで宣言した変数をstringへ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
C++ 構造体の一括初期化 {0}
-
構造体のデータを丸ごとコピー...
-
C言語 構造体の中に共用体を定...
-
「#undef」と「#define」の使い...
-
VBAにてcolorindexを変数に格納...
-
long型のデータをバイト型の配...
-
値が代入されてない時
-
異なる構造体のデータのコピー
-
構造体のポインタにNULLが入らない
-
VBAの変数のデータ型を変更する...
-
変数の初期化について
-
構造体の初期化方法について
-
ユーザー定義型変数の一括初期化
-
FILE構造体がどのように定...
-
charとucharの違い
-
typedefをプログラム中で解除す...
-
整数から16進数への変換 現在c...
-
VB.NETのStructureというのはど...
おすすめ情報