![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
メンバイニシャライザリストのかっこの中に値を書くと、その値でメンバが初期化されるそうですが、かっこの中には、そのメンバのコンストラクタの引数以外も書くことができるのでしょうか?
例えば以下のようなクラスを考えます。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
int型とchar型について
-
VBAのプログラムで、DIAG = 1# ...
-
C言語 構造体の中に共用体を定...
-
日付チェック関数について
-
Integer変数をカラにしたいので...
-
C++ メンバイニシャライザリス...
-
VB6変数の宣言dim j,k,p,m,n as...
-
C言語 配列の長さの上限
-
配列で格納したものをmsgboxで...
-
構造体を使ったファイルの読み込み
-
listboxの並び替え
-
C#で構造体の配列を持った構造...
-
あるディレクトリ内のファイル...
-
コンボボックスでデフォルト値...
-
先頭アドレスとは何ですか?
-
配列を使わずに、変数名を動的...
-
関数から配列を返すには?
-
基本アルゴリズムの『返す』の...
-
セグメントエラー
-
C#でstringをポインタとして渡す
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
C++ 構造体の一括初期化 {0}
-
構造体のデータを丸ごとコピー...
-
「#undef」と「#define」の使い...
-
long型のデータをバイト型の配...
-
C言語 構造体の中に共用体を定...
-
typedefをプログラム中で解除す...
-
VBAの変数のデータ型を変更する...
-
値が代入されてない時
-
異なる構造体のデータのコピー
-
VBAにてcolorindexを変数に格納...
-
charとucharの違い
-
構造体のポインタにNULLが入らない
-
VBAで符号無し整数
-
VB.NETのStructureというのはど...
-
構造体を型の異なる構造体に代入
-
日付チェック関数について
-
構造体の初期化方法について
-
変数の初期化について
おすすめ情報