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();
}请告诉我为什么b_ptr->foo()不会调用类b的foo()函数?
发布于 2010-03-18 08:54:42
由于您已经编写了代码,因此由于访问控制冲突,它将无法编译。由于b_ptr实际上是a *类型,而a::foo是私有类型,因此编译器不允许这样做。
但是,如果将a::foo公开,就可以正确地调用b::foo。
还有一个问题是你没有定义a::foo,所以你的程序不会链接。你需要定义它或者使它成为纯虚拟的(即virtual void foo(void) = 0;)。
发布于 2010-03-18 08:55:16
因为a:foo()不是公共的。
发布于 2010-03-18 09:05:20
几件事:
foo()而不是foo(void)...后者是不必要的,也不是惯用的C++ (它是类似C的语法)。class中写class,因为a的类型已经被声明了。b_ptr的函数中返回(添加void代码永远不会释放b_ptr)。当b_ptr的运行时类型(实例化/分配类型)为b*时,最好编写std::auto_ptr<a> b_ptr(new b);.a*。编译器(和类型系统)只知道编译时类型,因此根据编译时类型执行访问权限检查...因此,b_ptr->foo()不是allowed.b*类型或将a::foo设置为公共类型,以便以您希望的方式使用它。https://stackoverflow.com/questions/2466946
复制相似问题