Calling a Derived Class method from a Void Pointer cast to a Base Object
我想从空指针调用派生类中的重写方法。这在运行时失败,因为调用了虚拟基::foo()方法,而不是派生的::foo()。相关代码就是这样工作的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Class Base { public: Base(); virtual void foo() = 0; } Class Derived: public Base { public: Derived(); void foo(); } int main() { Derived* dv = new Derived(); void* ptr = dv; static_cast<Base*>(ptr)->foo(); } |
除非运气好,否则这是行不通的。因为这是一个