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这是私人的。