C ++ dynamic_cast - требование полиморфизма и понижающее преобразование

В следующем коде при построении 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
10
задан Matthew Woo 14 March 2018 в 20:17
поделиться