我有:
class A{
public:
virtual void foo();
};
class B : public A{
public:
void foo();
};
B *ptr = new B();
我想使用' ptr'直接致电A foo()
(A*)ptr->foo();
指针。
当我尝试
时foo()
它仍然会调用B&#39}的{{1}}版本。我该如何调用A&C的版本?
这可能吗?有哪些替代方案?谢谢。
答案 0 :(得分:19)
当您使用::
范围分辨率表单命名函数时,可以调用命名函数,就好像它不是虚拟的一样。
ptr->A::foo();
答案 1 :(得分:2)
您需要公开您的功能。您只需进行以下更改即可完成此操作:
class A{
public:
virtual void foo();
};
class B : public A{
public:
void foo();
};
如果不这样做,这些功能将自动保密,并且无法从“外部”访问。