动态绑定一些

时间:2012-10-25 13:55:44

标签: c++ dynamic-binding

嗨专家可以像这样做动态绑定。 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)  

2 个答案:

答案 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可转换为整数类型,并且值为012