基类调用派生类函数
如果是基类中的virtual function,并且派生类也对其进行了override,则
用基类的指针或者引用操纵派生类的指针或引用可以通过自动upcast直接使用派生类。
如果基类中没有派生类的一个函数,而通过基类的指针或者引用操纵派生类的指针或引用,
必须用显示downcast才可以使用,比如:
class Base {};
class Derived : public Base {
public:
void f() { cout << "Derived::f()\n"; }
};
Base* bptr = new Derived;
static_cast<Derived*>(bptr)->f();
或者
((Derived*)(bptr))->f();
否则会得到编译器错误。