我正在通过C++测验。并且遇到以下代码 - 这是违法的,但我不明白为什么。任何人都可以解释为什么这行:继承 - 为什么这是非法的?
Box* b1 = s1->duplicate();
生成编译器错误,“不能从Shape *转换为Box”? 我认为s1->duplicate()
呼叫Box::duplicate()
,因为s1
实际上指向Box
- 但从编译器错误它看起来像它叫Shape::duplicate()
。
#include <iostream>
struct Shape
{
virtual Shape* duplicate()
{
return new Shape;
}
virtual ~Shape() {}
};
struct Box : public Shape
{
virtual Box* duplicate()
{
return new Box;
}
};
int main(int argc, char** argv)
{
Shape* s1 = new Box;
Box* b1 = s1->duplicate();
delete s1;
delete b1;
return 0;
}
由于[吨的他(http://stackoverflow.com/questions/4665117/c-virtual-function-return-type)。 – 2012-08-15 21:21:01