C ++中的虚函数

时间:2013-08-16 11:03:33

标签: c++ oop

我正在用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();
}

上述程序的输出是: 派生类私有功能

我无法获得如何调用该类的私有函数。

1 个答案:

答案 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”的“乐趣”。