C ++ dynamic_cast - exigence polymorphe et downcasting

Dans le code suivant, lors de la construction de obj dans le cas 1, nous construisons un derived objet de classe aussi, mais ses fonctions de membre sont tout simplement inaccessibles à obj. Ainsi, alors que de passer (c'est à dire, dans le cas 2), à l'aide de obj comme source, nous avons construit derived dans déjà. Pourquoi obj doivent être polymorphe?

Si j'ai confondu ma description ci-dessus, pourquoi ne pas obj doivent être polymorphe lorsque upcasting, mais tout de passer il ne doivent être polymorphe, tout en utilisant 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

source d'informationauteur Mahesh