#include<iostream>
class Base
{
public:
~Base(){ std::cout << "~base" << std::endl; }
virtual void display(){ std::cout << "Base::display()" << std::endl; }
};
class Derived : public Base
{
public:
~Derived(){ std::cout << "~derived" << std::endl; }
virtual void display(){ std::cout << "Derived::display()" << std::endl; }
void sun(){ std::cout << "Derived::sun()" << std::endl; }
};
int main(void)
{
Base baseA;
Base& refBaseA = baseA;
Derived& refDerivedA = (Derived&)refBaseA;
refDerivedA.display();
refDerivedA.sun();
std::cout << "-----------分割线----------" << std::endl;
Base base;
Base& refBase = base;
Derived& refDerived = dynamic_cast<Derived&>(refBase);
return 0;
}
分割线上边的代码,把父类引用强制转换为派生类引用,能转换成功。
分割线下边的代码,使用dynamic_cast将父类引用转换为派生类引用却抛出了异常。
有点不理解。求指点。感激不尽。