В следующем коде при создании obj
в случае 1 мы также создаем объект класса derived
, но его функции-члены просто недоступны для obj
. Таким образом, при понижении (т.е. в случае 2), используя obj
в качестве источника, мы уже имеем в нем сконструированное derived
. Почему 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