* Soeren Sandmann
> Nedenstående program afvises af g++ med meddelelsen:
>
> storm
% c++ -ansi -Wall fest.cc
> fest.cc: In function `bool is_orange(Fruit *)':
> fest.cc:16: cannot dynamic_cast `fruit' (of type `class Fruit *') to type `class Orange *'
>
> Hvad gør jeg galt?
Glemmer virtuelle funksjoner (CC5.0 forklarer det ganske omstendig, i
motsetning til g++).
dynamic_cast<> kan brukes kun på "polymorphic types". De sistnevnte
får man ved å ha minst en virtuell funksjon. Tradisjonelt sett er
det dtor'en som går i første rekken:
class Fruit
{
public:
Fruit(){}
virtual ~Fruit(){};
};
BTW, hvis du trenger dynamic_cast tyder det ofte på at du har
designproblemer. Du skal i utgangspunktet ikke trenge å vite hvorvidt
du leker med "oranges" eller "fruits" i klientkoden.
> bool
> is_orange (Fruit *fruit)
> {
> Orange *orange;
>
> orange = dynamic_cast<Orange *>(fruit);
> if (orange)
> return true;
> else
> return false;
> }
bool
is_orange( const Fruit *fruit )
{
return dynamic_cast< const Orange* >( fruit );
}
but like I said -- tenk deg om før du tar denne ibruk.
ivr, som synes at (void) er en ufyselig vane i C++
--
Besides, meat tends to run away when possible, or fights. Either
response presents behavioral challenges too complex for any existing
robot.
-- Stuart Wilkinson, inventor of the "gastrobot"