C++对象如何访问其成员函数?

s_b*_*s_b 2 c++

C++对象如何知道它的成员函数定义存在于何处?我很困惑,因为Object本身不包含函数指针. sizeof在对象上证明了这一点.那么Runtime环境如何完成函数映射的对象呢?哪个类的成员函数指针表保持不变?

Oli*_*rth 10

如果你正在调用非虚函数,则不需要函数指针表; 编译器可以在编译时解析函数地址.所以:

A a;
a.func();
Run Code Online (Sandbox Code Playgroud)

转换为以下内容:

A a;
A_func(&a);
Run Code Online (Sandbox Code Playgroud)

通过基类指针调用虚函数通常使用vtable.所以:

A *p_a = new B();
p_a->func();
Run Code Online (Sandbox Code Playgroud)

转换为以下内容:

A *p_a = new B();
p_a->p_vtbl->func(p_a);
Run Code Online (Sandbox Code Playgroud)

其中p_vtbl是一个编译器实现的指针,指向特定于实际类的vtable *p_a.