特别是,无论如何都不会有某种功能指针?
解决方法
非虚拟成员函数实际上只是一个语法糖,因为它们几乎像普通函数,但具有访问检查和隐式对象参数.
struct A { void foo (); void bar () const; };
基本相同:
struct A { }; void foo (A * this); void bar (A const * this);
需要vtable,以便为特定的对象实例调用正确的函数.例如,如果我们有:
struct A { virtual void foo (); };
‘foo’的实现可能近似于:
void foo (A * this) { void (*realFoo)(A *) = lookupVtable (this->vtable,"foo"); (realFoo)(this); // Make the call to the most derived version of 'foo' }