在C++中什么时候虚函数可以使用静态绑定?如果通过指针访问它,直接访问,或从不?
通过指针或引用调用虚方法时,将使用动态绑定.在任何其他时间,使用编译时绑定.例如:
class C; void Foo(C* a, C& b, C c) { a->foo(); // dynamic b.foo(); // dynamic c.foo(); // static (compile-time) }
如果要调用函数的基类版本,可以通过显式命名基类来实现:
class Base { public: virtual ~Base() {} virtual void DoIt() { printf("In Base::DoIt()\n"); } }; class Derived : public Base { public: virtual void DoIt() { printf("In Derived::DoIt()\n"); } }; Base *basePtr = new Derived; basePtr->DoIt(); // Calls Derived::DoIt() through virtual function call basePtr->Base::DoIt(); // Explicitly calls Base::DoIt() using normal function call delete basePtr;