我有:
class A{
public:
virtual void foo();
};
class B : public A{
public:
void foo();
};
B *ptr = new B();
我想使用“ptr”指针直接调用A的foo()
方法。
当我尝试这样做时:
(A*)ptr->foo();
它仍然调用B版本的foo()
函数。我如何调用A版本呢?
这个有可能吗?还有其他可选方案吗?谢谢。
我有:
class A{
public:
virtual void foo();
};
class B : public A{
public:
void foo();
};
B *ptr = new B();
我想使用“ptr”指针直接调用A的foo()
方法。
当我尝试这样做时:
(A*)ptr->foo();
它仍然调用B版本的foo()
函数。我如何调用A版本呢?
这个有可能吗?还有其他可选方案吗?谢谢。
使用 ::
作用域分辨符给函数命名时,会像非虚函数一样调用所命名的函数。
ptr->A::foo();
B
的用户不应该关心调用哪个版本的foo
,这是多态的主要思想。 - David Rodríguez - dribeasclass A{
public:
virtual void foo();
};
class B : public A{
public:
void foo();
};
A
的用户逃避了类设计者的意图。这可能意味着某处存在设计错误:要么A
没有提供所需的所有功能,要么A
的用户不理解A
应该执行的任务。 - Pete Becker