0

嗨专家我可以像这样进行动态绑定吗?objshapes 是名为 Shape 的父类,而 Rectangle 是子类。我有几个子类,所以根据用户选择的形状,我需要将正确的形状绑定到 objShapes。所以我想我可以像这样绑定。但我得到一个错误。

 Shape *objShapes[3];    
 objshapes[size]= &new Rectangle(3,lvaule,5)  

 //error: lvalue required as unary ‘&’ operand

希望有人可以提供帮助。谢谢

这个对吗

  objshapes[size]= new Rectangle(3,lvaule,5)  
4

2 回答 2

1

您需要指向基类的指针数组或容器,或者最好是智能指针。例如:

std::vector<Shape*> objshapes;
objshapes.push_back(new Rectangle(3,lvaule,5));
objshapes.push_back(new Circle( args));

如果您使用原始指针而不是智能指针,则必须确保通过调用delete所有指针来取消分配形状使用的内存。

编辑,因为您不愿意使用标准库容器,并且您已经澄清您有一个 数组Shape*,而不是一个 数组Shape,那么您可以这样填充数组:

objshapes[idx]= new Rectangle(3,lvaule,5);
于 2012-10-25T14:02:10.047 回答
1
Shape *objShapes[3];

这将 objshapes 声明为 3 个指向形状的指针的数组。

objshapes[size]= &new Rectangle(3,lvaule,5)  

这是没有意义的。

这个对吗

objshapes[size]= new Rectangle(3,lvaule,5) 

是的1,这是正确的。new返回一个指向矩形的指针,它可以存储在指针形状类型的变量中。由于objshapes是一个指向形状的指针数组。objshapes[size]是指向形状的指针——它可以接受指向矩形的指针。

1. 假设size可转换为整数类型,且值为012

于 2012-10-25T14:54:16.123 回答