掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
構造体テーブルをメンバ変数にするには? (ID:52179)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> ところでmem-initializerとは具体的に何ですか? member initializerの文法表記上での記述です。 >foo::foo (void) : array_(temp_, temp_ + sizeof(temp_) / sizeof(temp_[0])) { } の >array_(temp_, temp_ + sizeof(temp_) / sizeof(temp_[0])) の部分です。 基底クラス及びメンバの初期化を行うために,専用の構文が用意されています。 簡単に書くと,コンストラクタは, クラス名(仮引数群) : 基底クラス名(引数群), メンバ変数名(引数群), /* 他の基底クラスとかメンバ変数とか */ { /* コンストラクタ本体 */ } のようになります。 メンバ変数が組み込み型の変数の場合,引数群には ・何も与えない ・その型に変換可能な型の値 のどちらかが指定できます。 何も与えなかった場合,0が指定されたのと同じ扱いです。 #初期化しなかった場合は不定値です。 メンバ変数がクラス型の場合や,基底クラスに関して, 引数群にはコンストラクタの引数として働く値を渡します。 何も与えなかった場合,仮引数を受け取らないコンストラクタを呼び出します。 該当するコンストラクタがなければ当然コンパイル時にエラーになります。 #初期化しなかった場合,引数無しで初期化されます。 ちなみに,mem_initializerの記述順序は初期化順序を左右しません。 初期化順序は,基底クラスが先で,先に定義されているメンバから順に初期化されます。 class foo { int n1_; int n2_; public: foo (int n1, int n2) : n2_(n2), n1_(n2_ - n1) {} }; があったとき,n1_の値は不定です。 #n1_が先に初期化され,n2_が後から初期化されるため。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.