В следующем коде при построении obj
в случае 1 мы также создаем объект класса , производный
, но его функции-члены просто недоступны для obj
. Таким образом, при понижающем преобразовании (то есть в случае 2) с использованием obj
в качестве источника мы уже имеем построенный производный
в нем. Почему obj
должен быть полиморфным?
Если я запутал вас своим приведенным выше описанием, почему obj
не должен быть полиморфным при повышении, а при понижении ] должен ли быть полиморфным при использовании dynamic_cast
?
class base
{
public:
base()
{
cout<< " \n base constructor \n";
}
};
class derived : public base
{
public:
derived()
{
cout << " \n derived constructor \n";
}
};
base *obj = dynamic_cast<base*> (new derived); // case 1: explicitly upcasting
derived *OBJ = dynamic_cast<derived*> (obj); // case 2: error