コンストラクタ

[戻る]
ガラ 2007/12/10(月) 10:43:55
VC++ 5.0 
OS  XP
あるリストを解析中なのですが、
コンストラクタの定義の記述のところで
コロンとして、その後ろに定数つき関数名が書いてあります。
ここで
「: LzwByteArray(255)」
は、どういう意味でしょうか?ご存知の方よろしくお願いします。

    // ==============
    // コンストラクタ
    // ==============
    BitStream(): LzwByteArray(255){
        blen = 0;
    }

tetrapod 2007/12/10(月) 11:22:19
メンバーまたは基底クラスのコンストラクタによる初期化
ということで C++ の文法書に必ず記載があるので読むべし

LzwByteArray というメンバまたは基底クラスを (255) で初期化しておる
blen=0; も本来コンストラクタを使うべきだろう

bun 2007/12/10(月) 11:22:22
これだけの情報だと、たぶんとしか、言えませんが

BitStreamクラスに、LzwByteArrayというメンバがいませんか?
そして、LzwByteArrayのクラスにはint値を引数にとるコンストラクタ
がありませんか?
そういうことです。

ちなみに、今回の場合なら、
BitStream()
{
  LzwByteArray = 255
   :
}
としてもほとんど同じです。

でもちょっと違いがあります。
  BitStream(): LzwByteArray(255)
だと、いきなり int引数をとるコンストラクタで初期化されますが、
  BitStream()
  {
    LzwByteArray = 255
      :
  }
だと、
まず LzwByteArray はデフォルトコンストラクタ(引数無しコンストラ
クタ)で初期化され、BitStreamオブジェクトが生成された後で、int引
数をとるコンストラクタが型変換コンストラクタとして作用します。
つまり、後者は LzwByteArray のクラスにデフォルトコンストラクタ
が無ければ、そもそもコンパイルエラーとなりますし、あったとして
もコンストラクタが2回走ることになります。

そんなわけで、デフォルトコンストラクタ以外でメンバを初期化した
い場合は、
  BitStream(): LzwByteArray(255)
がお勧めです。

PATIO 2007/12/10(月) 11:23:51
C++のコンストラクタの記述で初期化子で調べればわかると思います。
多分、殆どのC++の本には載っている奴だと思います。

BitStream::BitStream()
: LzwByteArray(255)
{
  blen = 0;
}

というのと同じ事だと思います。
ヘッダーのクラス宣言の中で書いているんですよね、多分。

ガラ 2007/12/10(月) 16:03:01
tetrapodさん、bun さん、PATIO さん、
レスポンスありがとうございました。
LzwByteArray はクラスで、int型の引数をひとつ持つ、
コンストラクタが定義されていましたが、
これが、BitStreamの規定クラスになっていました。
ほぼ、bun さんの推測どおりです。
みなさん、ありがとうございました。

ガラ 2007/12/10(月) 16:03:37
[[解決]]
これで解決とさせていただきます。

古いスレッドには追加発言できません。