基底クラスってなんやねん。
そう思っていた時期が僕にもありました。
基底クラスってとても便利なんです。
inemaruさんもおっしゃる通り配列にまとめることができるんです。
このようなクラスがあったときに
コード:
class Base
{
public:
virtual void func(){ cout << "base" << endl; }
};
class A:public Base
{
public:
void func(){ cout << "A" << endl; }
};
class B:public Base
{
public:
void func(){ cout << "B" << endl; }
}
こんなことができます。
コード:
int main()
{
//基底クラスのポインタに継承クラスのポインタを代入することができる。
Base* objs[3]={ new Base(), new A(), new B() };
for(int i = 0; i < 3; ++i) objs[i]->func();//Base A B と表示
}
こんなこともできます。
コード:
int main()
{
Base* obj;
int i;
cin << i;
if(i==0) obj=new Base();
else obj=new A();
obj->func();
}
こんなことができてどうだっていうんだ、と思われるかもしれませんが、
プログラムの規模が大きくなってくると
「このコード、似たようなのを前に書いたなー」
「なんか似たような処理してんなー」
なんてことが出てきます。
その時に継承のありがたみが出てくるかもしれません。
しかも管理もしやすくなります。
A::funcの動作を変えたいときはA::funcを書き換えるだけで、他をいじる必要はありません。
また、新たにCクラスを作った場合、Baseを継承してさえいればmain文でCクラスを宣言するだけで他をいじる必要がありません。
今回の場合だとTaskクラスを継承していて、UpDate、Drawを定義したクラスであれば、SceneMgr::Updateのswitch内でnewしてやるだけで、他はいじらずに新たな機能を追加できます。