Теперь, если класс не полиморфен, компилятору не удастся выяснить, указывает ли pCar на honda или toyota car. Обратите внимание, что это только один из способов реализации dynamic_cast, поскольку стандарт C ++ ничего не говорит о vtables.

дующем коде при построении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

Ответы на вопрос(4)

Ваш ответ на вопрос