2012-07-11 50 views

回答

3

当您在调用中使用限定的函数名称时,将直接调用指定的函数,而不使用任何“v-表”。这适用于从派生类成员函数调用基类成员函数(如您的示例中所示)。这也适用于所有其他上下文中的成员函数调用。

例如

base_class *p = new dev_class; 
p->v_func1(); // virtual call - calls `dev_class::v_func1` 
p->base_class::v_func1(); // non-virtual call - calls `base_class::v_func1` 

合格的函数名抑制和覆盖虚拟调度机制和有效的把虚成员函数调用到一个普通的成员函数调用。

+0

谢谢!我想知道... – 2012-07-11 08:54:42

1

编译器只知道所有类的所有虚拟表的地址。这同样要问“编译器如何在构造函数中设置VMT”?存储在VMT中的函数的地址仅仅是函数,它们以编译器的方式几乎相同。

2

base_class::v_func1()被称为不使用v表,就像任何非虚拟函数。

相关问题