C++のオーバライド
Posted: 2011年7月06日(水) 08:28
おはようございます。
C++での質問です。
オーバーライドを使いたいのですが
予想通りに動きません。これはどうしてなのでしょうか?
予想
最終的に
printf("%d\n",saList[1].Get());
の行動が
printf("%d\n",SaList[1]->Get());
と同じにしたいのですが。
2回目のsaList.Getでsbと表示したい。
環境はVC2008Expressです。
よろしくお願いします。
C++での質問です。
オーバーライドを使いたいのですが
予想通りに動きません。これはどうしてなのでしょうか?
予想
最終的に
printf("%d\n",saList[1].Get());
の行動が
printf("%d\n",SaList[1]->Get());
と同じにしたいのですが。
2回目のsaList.Getでsbと表示したい。
class sa{
public:
int a;
virtual int Get(){
printf("sa\n");
return a;
}
sa(){a=0;}
};
class sb:public sa{
int b;
public:
int Get(){
printf("sb\n");
return b;
}
sb(){a=10,b=20;}
};
sa *SaList[2] = {
//{new sa},
//{new sb},
};
//クラスをまとめるリスト
sa *saList;
sa Make_StateList2(sa List[]){
saList = List;
return List[0];
}
int main(){
//クラスのを作成(アドレスとびとび)
SaList[0] = new sa();
SaList[1] = new sb();
//そのままの状態を表示
printf("%d\n",SaList[0]->Get());
printf("%d\n",SaList[1]->Get());
//クラスリストに代入(配列にいれて添字でアクセスできるように)
saList = new sa[2];
saList[0] = *SaList[0];
saList[1] = *SaList[1];
//クラスリストに代入されたものを使う
printf("%d\n",saList[0].Get());
printf("%d\n",saList[1].Get());
よろしくお願いします。