儿童类C ++中的模糊函数调用

时间:2013-08-23 12:07:02

标签: c++ ambiguous

我有一个与以下示例相关的问题:

Class A{virtual foo(};virtual g()}; 
Class B: public A {virtual foo();virtual g()};
B::foo(){A::foo()};
A::foo(){g()};

当我调用B :: foo()时,它将使用B :: g()而不是A :: g(),如何解释它,是因为'this'指针始终指向当前对象?非常感谢!

2 个答案:

答案 0 :(得分:1)

B::foo()中,您正在调用A::foo(),并将this指针传递给指向B类型的对象。

A::foo()内,你正在调用this->g(),这是多态的,它会调用B::g(),因为thisA::foo()指针的类型是{{1} }}

答案 1 :(得分:1)

由于g()是虚拟的,因此在运行时解析。在运行时,该指针指向B的对象,因此B的g()被称为