-4

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

上述程序的输出是: 派生类私有函数

我无法了解我们如何能够调用类的私有函数。

4

1 回答 1

1

让我们分析调用代码

int main(){
    Base *bp=new Derived();
    bp->fun();
}

在这里,当您编写 bp->run() 代码时,会发生两件事。

1) fun 是否属于 bp 对象的类并且是公共的

2)“有趣”调用的绑定。

第一,发生在编译期间。在检查 fun 是否可调用时,编译器只检查 bp 的类,这里是“Base”,“fun”是 Base 的一部分并且是公共的。

第二,由于 fun 是虚拟的,函数绑定不会在编译时发生。相反,编译器会插入一些代码,以确保在运行时调用“Derived”的“fun”。

于 2013-08-16T11:41:48.550 回答