虚函数

use*_*113 7 c++

class a
{
 virtual void foo(void) ;
};

class b : public  a
{
public:
 virtual void foo(void)
  {
  cout<< "class b";
  }
};

int main ( ) 
{
class a *b_ptr = new b ;
b_ptr->foo();
}
Run Code Online (Sandbox Code Playgroud)

请指导我为什么b_ptr-> foo()不会调用类b的foo()函数?

R S*_*hko 17

在编写代码时,由于访问控制违规,它将无法编译.由于b_ptr实际上是类型a *并且a::foo是私有的,因此编译器不允许这样做.

a::foo公开,这将正确调用b::foo.

还有一个问题是你没有定义,a::foo所以你的程序不会链接.您需要定义它或使其成为纯虚拟(即virtual void foo(void) = 0;).


Joh*_*ica -1

做到这一点

class a
{
public:
    virtual void foo(void);
};
Run Code Online (Sandbox Code Playgroud)

您不能覆盖私有函数。虽然我不确定你是如何设法打电话的,b_ptr->foo()因为a::foo这是私人的。

  • 这不是真的。您当然可以覆盖私有函数 - 这实际上是很好的做法。 (3认同)