【发布时间】:2012-08-24 08:03:12
【问题描述】:
我有:
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 的版本?
这可能吗?有哪些替代方案?谢谢。
【问题讨论】:
-
你能澄清一下你所说的“没用”吗?当您尝试上述代码时,究竟会发生什么?
-
这样做完全违背了使函数虚拟化的目的,因此这意味着
A类的用户正在逃避类设计者的意图。这可能意味着某处存在设计错误:A没有提供所需的所有功能,或者A的用户不明白A应该做什么。 -
@Code-Guru:因为成员函数是虚拟的,所以无论指针的静态类型如何(即强制转换是无用的),它都会被分派给最终的覆盖器,除非您禁用动态分派打电话...
-
@DavidRodríguez-dribeas 在 OP 中,该函数甚至不是公共的,因此代码甚至不应该编译,调度也不会成为问题。因此,为什么我问在这种情况下“不起作用”是什么意思。我有点不安,我花时间回答错误的问题,因为 OP 不完整......
标签: c++ inheritance pointers virtual