В коде ниже:
1- В (2)
, почему BarIt()
вызывается несмотря на то, что Foo
(созданный в (1)
) не содержит BarIt ()? Должна ли быть ошибка времени выполнения (т.е. неопределенное поведение), не так ли?
2- При (3)
также BarIt()
вызывается несмотря на то, что Foo
(созданный в (1)
) не содержит BarIt ().
3 - Если я проверил bar
для NULL
, BarIt()
не будет вызван? Это значит, что bar
равно NULL
. Как bar
равняется NULL
и BarIt()
, как вам звонят? это должно быть NULL
ошибка исключения.
Примечание: я использую g ++ для кодовых блоков.
class Base
{
public:
virtual void DoIt() = 0; // pure virtual
virtual ~Base() {};
};
class Foo : public Base
{
public:
virtual void DoIt()
{
cout << "Foo\n";
};
void FooIt()
{
cout << "Fooing It...\n";
}
};
class Bar : public Base
{
public :
virtual void DoIt()
{
cout << "Bar\n";
}
void BarIt()
{
cout << "baring It...\n";
}
};
int main()
{
Base* base = new Foo; (1)
base->DoIt();
//Bar* bar = (Bar*)base;
//bar->BarIt(); (2)
Bar* bar = dynamic_cast<Bar*>(base);
//if(bar)
bar->BarIt(); (3)
return 0;
}