【发布时间】:2014-01-04 03:19:14
【问题描述】:
我快绝望了!我需要从指向我的基类的指针中调用一个非虚拟成员函数:
class A { };
class B : public A { public: void evilFunction() { std::cout << "Yay!"; } };
int main(void) {
A *pointer = new B();
// Now do something like this:
// pointer->evilFunction();
return 0;
}
我知道我可以使用 dynamic_cast 做到这一点 - 但我不允许这样做! 我真的不知道我还能做什么。从理论上讲,因为我有指针,我很确定我可以用指针算术做一些魔术来获取函数的内存位置然后调用它,但我不知道该怎么做,或者至少不知道怎么做开始。
谁能给我一个提示?这就是我所需要的。或者我将使用我史诗般的初学者技能编写代码来删除 g++,以报复 C++ 给我带来的痛苦!你不能让这种事情发生,对吧?!
【问题讨论】:
-
这是一个教科书式的虚函数用例。
-
事实上,你可以不用
dynamic_cast做到这一点。 -
你为什么需要...?
-
在上面的代码中,如果你打算删除
pointer,你需要先static_cast它,如Alf's answer所示。delete pointer;将是未定义的行为,除非您为A定义virtual析构函数。 -
@Seva Alekseyev:是的,就是这样。
标签: c++ class oop pointers function-call