In the following code, while constructing obj
in case 1, we construct a derived
class object too, but its member functions are just inaccessible to obj
. So while downcasting (i.e., in case 2), using obj
as source, we have the constructed derived
in it already. Why would obj
need to be polymorphic?
If I confused you with my above description, why doesn't obj
need to be polymorphic when upcasting, but while downcasting it does need to be polymorphic while using dynamic_cast
?
class base
{
public:
base()
{
cout<< "
base constructor
";
}
};
class derived : public base
{
public:
derived()
{
cout << "
derived constructor
";
}
};
base *obj = dynamic_cast<base*> (new derived); // case 1: explicitly upcasting
derived *OBJ = dynamic_cast<derived*> (obj); // case 2: error
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…