Visual Studio 2003
次のプログラムをコンパイルして実行するために使用しています。
4 つの割り当て操作があり、そのうち 2 つが正常に実行され、2 つが例外を発生させると予想されます。= operator
不適切なクロス キャスト ( Apple
toOrange
またはOrange
toへのキャスト) 中に失敗することが予想される、オーバーロードされた内部の動的キャストがありApple
ます。しかし、私の場合、4 つの操作すべてが失敗しています ( Raising exception )。同じコードを実行しましたがVisual Studio 2008
、期待どおりに正常に動作しています。しかし、プロジェクト全体を に移動するのVisual Studio 2008
は困難です。これは の問題ですVisual Studio 2003
か? もしそうなら、これを修正する方法はありますか?
注: クラスFruit
は読み取り専用で、変更できません。
class Fruit
{
public:
virtual void operator = ( const Fruit& fruit )
{
}
};
class Apple : public Fruit
{
public:
virtual void operator = ( const Fruit& fruit )
{
Apple& apple = dynamic_cast<Apple&>( fruit );
}
};
class Mango : public Fruit
{
public:
virtual void operator = ( const Fruit& fruit )
{
Mango& mango = dynamic_cast<Mango&>( fruit );
}
};
int main( void )
{
Apple apple;
Mango mango;
Fruit* fruit[] = { &apple, &mango };
*fruit[0] = *fruit[0]; /* Expect to work ok */
*fruit[0] = *fruit[1]; /* Expect an exception */
*fruit[1] = *fruit[0]; /* Expect an exception */
*fruit[1] = *fruit[1]; /* Expect to work ok */
}