我正在使用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