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()被调用?”。
答案 0 :(得分:3)
就是这样。
Base::callF
函数。它是公开的,因此将其称为forom main
没有问题。Base::callF
函数想要调用名为F
的函数。 F
唯一可见的Base::callF
是Base::F
。它是私有的,但callF
是Base
的成员,因此它可以查看和使用所有其他成员,包括私有成员。Derived::F
函数与此任何内容无关。它只是另一个与Base::F
无关的函数,恰好有类似名称。