嗨专家可以像这样做动态绑定。 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)
答案 0 :(得分:1)
你需要一个指针的数组或容器,或者最好是smart pointers到基类。例如:
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);
答案 1 :(得分:1)
Shape *objShapes[3];
这将objshapes声明为3个指向Shape的数组。
objshapes[size]= &new Rectangle(3,lvaule,5)
这是非感性的。
这是正确的
objshapes[size]= new Rectangle(3,lvaule,5)
是 1 ,这是正确的。 new
返回一个指向矩形的指针,该指针可以存储在指向指针形状的变量中。因为objshapes
是一个指向形状的指针数组。 objshapes[size]
是指向Shape的指针 - 它可以接受指向矩形的指针。
1。假设size
可转换为整数类型,并且值为0
,1
或2
。