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;
}