Tôi đang trải qua một bài kiểm tra C++. Và đi qua đoạn mã sau - nó là bất hợp pháp, nhưng tôi không thể hiểu tại sao. Bất cứ ai có thể giải thích lý do tại sao dòng này:Thừa kế - tại sao điều này bất hợp pháp?
Box* b1 = s1->duplicate();
tạo lỗi trình biên dịch "không thể chuyển đổi từ hình dạng * thành hộp"? Tôi giả định rằng s1->duplicate()
đang gọi Box::duplicate()
vì s1
thực sự trỏ đến một Box
- nhưng từ lỗi trình biên dịch có vẻ như nó đang gọi 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;
}
Do [t của anh ấy] (http://stackoverflow.com/questions/4665117/c-virtual-function-return-type). –