softya(ソフト屋) さんが書きました:ダウンキャスト(親→子)は本来違う子をキャストしてしまう可能性があり危険なので出来るだけ避けるのが鉄則です。
なので、ダウンキャストが起こる設計自体を見なおしたほうが良いですね。
※ せっかくの抽象化を無意味にしてしまうので、オブジェクト指向的にも良くないと思います。
なるほど、やはりダウンキャストは使うべきでは、ないのですね。
いまいち、仮想クラスを用いて、ポリモーフィズムを使う場面というのがわからず、ゲームプログラミングの館においての、シーン変更などの実用例を見ても、あまりぴんと来ません。
少し、疑問におもっていることなのですが、
コード:
#include <iostream>
class ITest{
public:
virtual void Updata() = 0;
virtual ~ITest(){}
};
class CTest1:public ITest{
class ITest{
public:
virtual void Updata() = 0;
virtual ~ITest(){}
};
class CTest1:public ITest{
public:
virtual void Updata()override{}
void Draw(){};
};
class CTest2:public ITest{
public:
virtual void Updata() override{
//Draw();
}
void Draw();
};
int main(){
ITest *ptr[2];
ptr[0] = new CTest1();
ptr[1] = new CTest2();
for(int i = 0; i < 2; i++){
ptr[i]->Updata();
}
}
このような使い方をした場合外部参照でエラーになります。
この場合においても、やはり、ダウンキャストしなければならないのでしょうか?