我正在用C ++做一个输出问题,我没有得到以下问题背后的逻辑,任何人都可以给出一个清晰的想法。
Class Base{
public :
virtual void fun(){
cout<<"Base Class public function "<<endl;
}
};
class Derived:public Base{
private:
void fun(){
cout<<"Derived class private function ";
}
};
int main(){
Base *bp=new Derived();
bp->fun();
}
上述程序的输出是: 派生类私有功能
我无法获得如何调用该类的私有函数。
答案 0 :(得分:1)
让我们分析一下调用代码
int main(){
Base *bp=new Derived();
bp->fun();
}
这里,当您编写bp-&gt; run()时,会发生两件事。
1)有趣是否是bp对象类的一部分并且是公共的
2)“有趣”电话的约束。
第1,在编译期间发生。当检查fun是否可调用时,编译器只需检查bp的类,这里是“Base”,“fun”是Base的一部分,是公开的。
对于2nd,因为fun是虚拟的,所以在编译时不会发生函数绑定。相反,编译器会插入一些代码,以确保在运行时调用“Derived”的“乐趣”。