s->duplicate()返回一个Box*类型的对象,但是我得到了一个用Box*初始化它的错误。看起来它正在被转换回Shape*。如果将协变量返回类型转换回基类指针,有什么意义?:
struct Shape
{
virtual Shape* duplicate()
{
return new Shape;
}
};
struct Box : Shape
{
virtual Box* duplicate()
{
return new Box;
}
};
int main()
{
Shape* s = new Box;
Box* b = s->duplicate();
}错误:
main.cpp:22:12: error: cannot initialize a variable of type 'Box *' with an rvalue of type 'Shape *'
Box* b = s->duplicate();
^ ~~~~~~~~~~~~~~
1 error generated.发布于 2015-01-25 03:28:31
重点不在于这样做:
Box* b = s->duplicate();这显然不能工作,因为Shape::duplicate()返回一个Shape*。相反,如果要在Box*上直接调用duplicate(),则需要接受Box:
Box* old = new Box;
Box* b = old->duplicate(); // OK! We know it's a Boxhttps://stackoverflow.com/questions/28132869
复制相似问题