我有以下代码:
class A
{
};
class B : public A
{
public:
virtual void f() {}
};
int main()
{
A* a = new A();
B* b = static_cast<B*>(a);
b->f();
}
Run Code Online (Sandbox Code Playgroud)
该程序因分段错误而失败.有两种解决方案可以使这个程序工作:
但是,两者都不是一种选择.我认为这不起作用,因为在vtable中查找.
(在实际程序中,A也有虚函数.此外,在构造函数中不调用虚函数.)
有没有办法使这个程序工作?
Joe*_*Joe 12
你不能这样做,因为你创建的对象是A,而不是B.你的演员是无效的 - A的对象(用new创建)不能神奇地成为B的对象.
你是说A*a = new A()实际上是A*a = new B()?在那种情况下,我希望它能起作用.