コンストラクタ – プログラミング – Home

通知
すべてクリア

[解決済] コンストラクタ


ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

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

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


引用未解決
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

メンバーまたは基底クラスのコンストラクタによる初期化
ということで C++ の文法書に必ず記載があるので読むべし

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


返信引用
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

これだけの情報だと、たぶんとしか、言えませんが

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

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

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

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

C++のコンストラクタの記述で初期化子で調べればわかると思います。
多分、殆どのC++の本には載っている奴だと思います。

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

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


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

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


返信引用
ガラ
 ガラ
(@ガラ)
ゲスト
結合: 20年前
投稿: 201
Topic starter  

これで解決とさせていただきます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました