调用私有非虚基类函数,而不是Derived类中的函数

时间:2017-11-27 19:48:40

标签: c++ inheritance private

class Base{
public:
    void callF(){ F(); }
private:
    void F(){}
};
class Derived: public Base{
public:
    void F(){}
};
int main(){
    Derived d;
    d.callF();
}

令我惊讶的是,我调用了基础F()。我不明白为什么。 F()在Base类中声明并定义为private,因此Derived对象甚至不知道Base中是否存在这样的函数。派生类有自己的F(),但该函数被忽略。问题是“为什么基类F()被调用?”。

1 个答案:

答案 0 :(得分:3)

就是这样。

  1. 调用Base::callF函数。它是公开的,因此将其称为forom main没有问题。
  2. Base::callF函数想要调用名为F的函数。 F唯一可见的Base::callFBase::F。它是私有的,但callFBase的成员,因此它可以查看和使用所有其他成员,包括私有成员。
  3. Derived::F函数与此任何内容无关。它只是另一个与Base::F无关的函数,恰好有类似名称。