【发布时间】:2018-05-11 03:37:50
【问题描述】:
class Base{
public:
void callF(){ F(); }
private:
void F(){}
};
class Derived: public Base{
public:
void F(){}
};
int main(){
Derived d;
d.callF();
}
令我惊讶的是,调用了 Base F()。我不明白为什么。 F() 在 Base 类中被声明并定义为私有,因此 Derived 对象甚至不知道 Base 中存在这样的函数。派生类有自己的 F(),但该函数被忽略。问题是“为什么要调用基类 F()?”。
【问题讨论】:
-
"我知道如果我在Base virtual中声明F(),问题就解决了,但是这个例子是怎么回事? - 你没有声明它
virtual. -
主要问题是“为什么要调用 Base F()?”
-
@Grig ^^^^^^@Oliver 说了什么。
-
@user0042 你明白我的问题吗? “为什么要调用 Base F()?”
-
@Grig 因为您没有将派生类中的
Base::F()重写为virtual函数。
标签: c++ inheritance private