Здравствуйте, Vamp, Вы писали:
V>2. dynamic_cast.
V>С-каст не способен реализовать его функциональность. Отличается от статик каста проверкой типов во время выполнения, следовательно, его использование сопряжено с накладными расходами и требует включения RTTI (Run-time type information), однако безопасно. Существует в двух формах — указательной и ссылочной. Пример:
V>V>class A {};
V>class B : public A {};
V>...
V>A a;
V>B b;
V>A* pa=&b;
V>A& ra=b;
V>B* pb=dynamic_cast<B*>(pa); //указательная форма
V>B& rb=dynamic_cast<B&>(ra); //ссылочная форма
V>
V>Формы различаются поведением. в случае если во время выполнения программы проверка типов показала, что преобразование некорректно (например, указателя не указывает на объект запрашиваемого типа). Указательная форма возвращает нулевой указатель, а ссылочная генерирует исключени bad_cast.
Если быть до конца точным, то:
class A
{
public:
virtual ~A(){}
};
class B : public A
{
public:
virtual ~B() {}
};