派生クラスのメンバ関数に処理がいかない
Posted: 2011年7月07日(木) 00:03
システムボタンを、作っているのですが、
ボタンを押した後の処理が思ったところに行きません。
以下 プログラムを簡略化しました。
読みづらかったらすいません。
このプログラムで「2」と表示させたいのですが、「1」と表示されます。
どうしてなのかわかりません。
助言をよろしくお願いいたします。
//a1クラス
//---------------------
class a1
{
public:
int b;
a1();//コンストラクタ
void a();//メンバ変数bの値を表示
};
a1::a1()//コンストラクタ
{
b=1;//メンバ変数bに1を代入
}
void a1::a()//メンバ変数bの値を表示
{
DrawFormatString(100, 100,GetColor(255,255,255), "%d" , b);
}
//---------------------
//a2クラス
//---------------------
class a2 : public a1//←a1を継承します
{
public:
int b;
a2();//コンストラクタ
void a();//メンバ変数bの値を表示
};
a2::a2()//コンストラクタ
{
b=2;//メンバ変数bに2を代入
}
void a2::a()//メンバ変数bの値を表示
{
DrawFormatString(100, 100,GetColor(255,255,255), "%d", b);
}
//-------------------
//aListクラス
//---------------------
class aList
{
public:
vector<a1>aList;//クラスa1のvectorクラスListを生成
aList();//コンストラクタ
};
aList::aList()
{
aList.resize(0);//aListのデータを0にする。
{
a2 a2;//クラスa2のa2を生成。
aList.push_back(a2);//ここでaListにa2を登録します。
}
}
//---------------------
//aListKanriクラス
//---------------------
class aListKanri
{
public:
aList *p_aList;//aListクラスのポインタ
void a3();//aListに登録されている最初のデータを表示する
};
void aListKanri::a3()//aListに登録されている最初のデータを表示する
{
p_aList->aList.at(0).a();
}
//---------------------------
int Key[256];
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key==1) GetHitKeyStateAll_InputKey++;
else GetHitKeyStateAll_InputKey=0;
}
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
//--- ▼ 前処理 ▼ ---
SetDrawScreen( DX_SCREEN_BACK );//描画先を裏画面に設定
aList aList;//aListクラス aListを生成
aListKanri aListKanri;//aListKanriクラス aListKanriを生成
aListKanri.p_aList = &aList;//aListKanriのメンバaListポインタに、aListのアドレスを代入
//--- ▲ 前処理 ▲ ---
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0)
{
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
//--- ▼ ココから ▼ ---
aListKanri.a3();aListに登録されている最初のデータを表示する
ScreenFlip();//裏画面を表画面に反映
//--- ▲ ココまで ▲ ---
}
DxLib_End();
return 0;
}
ボタンを押した後の処理が思ったところに行きません。
以下 プログラムを簡略化しました。
読みづらかったらすいません。
このプログラムで「2」と表示させたいのですが、「1」と表示されます。
どうしてなのかわかりません。
助言をよろしくお願いいたします。
//a1クラス
//---------------------
class a1
{
public:
int b;
a1();//コンストラクタ
void a();//メンバ変数bの値を表示
};
a1::a1()//コンストラクタ
{
b=1;//メンバ変数bに1を代入
}
void a1::a()//メンバ変数bの値を表示
{
DrawFormatString(100, 100,GetColor(255,255,255), "%d" , b);
}
//---------------------
//a2クラス
//---------------------
class a2 : public a1//←a1を継承します
{
public:
int b;
a2();//コンストラクタ
void a();//メンバ変数bの値を表示
};
a2::a2()//コンストラクタ
{
b=2;//メンバ変数bに2を代入
}
void a2::a()//メンバ変数bの値を表示
{
DrawFormatString(100, 100,GetColor(255,255,255), "%d", b);
}
//-------------------
//aListクラス
//---------------------
class aList
{
public:
vector<a1>aList;//クラスa1のvectorクラスListを生成
aList();//コンストラクタ
};
aList::aList()
{
aList.resize(0);//aListのデータを0にする。
{
a2 a2;//クラスa2のa2を生成。
aList.push_back(a2);//ここでaListにa2を登録します。
}
}
//---------------------
//aListKanriクラス
//---------------------
class aListKanri
{
public:
aList *p_aList;//aListクラスのポインタ
void a3();//aListに登録されている最初のデータを表示する
};
void aListKanri::a3()//aListに登録されている最初のデータを表示する
{
p_aList->aList.at(0).a();
}
//---------------------------
int Key[256];
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
char GetHitKeyStateAll_Key[256];
GetHitKeyStateAll( GetHitKeyStateAll_Key );
for(int i=0;i<256;i++){
if(GetHitKeyStateAll_Key==1) GetHitKeyStateAll_InputKey++;
else GetHitKeyStateAll_InputKey=0;
}
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
//--- ▼ 前処理 ▼ ---
SetDrawScreen( DX_SCREEN_BACK );//描画先を裏画面に設定
aList aList;//aListクラス aListを生成
aListKanri aListKanri;//aListKanriクラス aListKanriを生成
aListKanri.p_aList = &aList;//aListKanriのメンバaListポインタに、aListのアドレスを代入
//--- ▲ 前処理 ▲ ---
while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0)
{
//↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない
//--- ▼ ココから ▼ ---
aListKanri.a3();aListに登録されている最初のデータを表示する
ScreenFlip();//裏画面を表画面に反映
//--- ▲ ココまで ▲ ---
}
DxLib_End();
return 0;
}