Допустим, у нас есть два класса:dynamic_cast: Два класса, которые имеют почти одинаковые методы
class A:
{
A(int a); // c'tor
virtual ~A(); // d'tor
FirstMethod(...);
SecondMethod(...);
}
class B:public A
{
B(int a); // c'tor
~B(); // d'tor
FirstMethod(...);
SecondMethod(...);
}
двух классов А и В имеют те же методы (то же имя и параметры, но не обязательно же функциональность) и члены, за исключением имени деструктора и имени конструктора, которые отличаются. Теперь, скажем, у нас есть объект:
A* aObject = new A();
и мы делаем:
B* bObject= dynamic_cast<B*>(aObject);
преуспеет последний кастинг или что bObject будет NULL? или, другими словами, может ли программа различать объекты типа A * и объекты типа B *?
Вы всегда можете проверить, не является ли он плохим указателем или поймать 'std :: bad_cast'. Поэтому я бы перефразировал ваш вопрос. Еще одно замечание, ваш код не компилируется. Деструкторы не могут иметь аргументов. –
Мой плохой ответ, не задумываясь, и он удаляется. Фактически, 'dynamic_cast' не связан с 'тем же базовым классом'. Он используется для приведения указателей из базового класса в производный класс, а не между производными классами. – xis
@ Xiaoge Su, вопрос редактируется, B должен был быть получен из A – user2750466