以下代码给出的编译错误为: “无法从第1行中的'Cloneable *'转换为'AClass *'”。 据我所知,与编译时间和运行时多态的概念。但我没有一个具体的推理在此。善良的帮助。多态性:代码中的Compliation错误需要解释
struct Cloneable
{
virtual Cloneable* clone()
{
cout << "Cloneable";
return new Cloneable;
}
virtual ~Cloneable() {}
};
struct AClass : public Cloneable
{
virtual AClass* clone()
{
cout << "AClass";
return new AClass;
}
};
int main()
{
Cloneable* s1 = new AClass;
AClass* s2 = s1->clone(); //Line 1
return 0;
}
@muhmud ...这个代码将正常工作,如果我使用的static_cast()(基类指针类型强制转换为派生类指针类型).Modifying行1为:ACLASS * S2 =的static_cast(S1 - > clone());我真正想知道的是,编译器如何解释这段代码。 –
user2100866
2013-02-27 19:31:05
@ user2100866 - 你应该看看这个 - http://stackoverflow.com/questions/28002/regular-cast-vs-static-cast-vs-dynamic-cast。 dynamic_cast()'在向下转换过程中执行运行时检查,可以防止未定义的行为。 – muhmud 2013-02-27 20:20:52