我正在使用ptr_vector來存儲「形狀」。我試圖用派生的形狀類來填充它,比如「圈子」,每次我試圖貶低它們時,我都會變得糟糕。BOOST和C++:似乎無法獲得多態性工作
class Shape
{
public:
virtual ~Shape() {};
virtual void print() { std::cout << "shape" << std::endl; };
};
class Circle :
public Shape
{
public:
void print() { std::cout << "circle" << std::endl; };
};
int main()
{
boost::ptr_vector<Shape> shapes;
shapes.push_back(new Circle);
BOOST_FOREACH(Shape shape, shapes)
{
Circle& tempCircle = dynamic_cast<Circle&>(shape);
if(&tempCircle != NULL)
tempCircle.print();
}
system("PAUSE");
}
還要注意,因爲'打印() '是一個虛函數,在這種情況下'dynamic_cast'是不必要的。 – Chad
@查德:哦,對了,我錯過了那部分。我會編輯,謝謝:) –
@Chad:當我用於(自動常量&形狀:形狀),當我嘗試調用shape.print()時,它表示該對象具有與成員不兼容的類型限定符函數:( – dubesinhower