SP6章のメンバ初期化子リスト?について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
むへーれ
記事: 2
登録日時: 5年前

SP6章のメンバ初期化子リスト?について

#1

投稿記事 by むへーれ » 4年前

ゲームプログラミングの館SP6章の

コード:

/*BaseScene.cpp*/

#include "BaseScene.h"
#include "DxLib.h"

BaseScene::BaseScene(ISceneChanger* changer) : 
    mImageHandle(0) {
    mSceneChanger = changer;
}

void BaseScene::Finalize(){
    DeleteGraph(mImageHandle);
}

void BaseScene::Draw(){
    DrawGraph(0,0,mImageHandle,FALSE);
}
のうち

コード:

BaseScene::BaseScene(ISceneChanger* changer) : 
    mImageHandle(0) {
    mSceneChanger = changer;
}
これがメンバ初期化というのは分かったのですが、なぜmImageHandle(0)の中でmSceneChanger=changerを行っているのかがよくわかりませんでした
mImageHandleを使わない場合でもmSceneChanger=changerというのは必要だと思うのですがmSceneChanger(changer){}という書き方ではだめなのでしょうか

アバター
usao
記事: 1887
登録日時: 11年前

Re: SP6章のメンバ初期化子リスト?について

#2

投稿記事 by usao » 4年前

文面から察するに,ちょっとコードの読み方を間違っていると思う.

コード:

BaseScene::BaseScene(ISceneChanger* changer) 
    : mImageHandle(0)  //←メンバイニシャライザ
{
    //ここはコンストラクタの実装
    mSceneChanger = changer;
}
mImageHandleを0に初期化する記述にはメンバイニシャライザを使っているが,
mSceneChangerに関しては,コンストラクタの処理にて引数の値を代入している.

この例は「初期化or代入」で何かしらの違いが出る場面でもないだろうから,

コード:

BaseScene::BaseScene(ISceneChanger* changer) 
{
    //ここはコンストラクタの実装
    mImageHandle = 0;  //普通に0を代入
    mSceneChanger = changer;
}
でも

コード:

BaseScene::BaseScene(ISceneChanger* changer) 
    : mImageHandle(0)  //←メンバイニシャライザ
    , mSceneChanger( changer )  //←こっちもメンバイニシャライザで初期化するぜ!
{
    //ここはコンストラクタの実装(何もやることないです)
}
でも,好きに書けば良いと思う.

むへーれ
記事: 2
登録日時: 5年前

Re: SP6章のメンバ初期化子リスト?について

#3

投稿記事 by むへーれ » 4年前

() {}となっていても繋がっているわけではないのですね
ありがとうございます

返信

“C言語何でも質問掲示板” へ戻る