2012-10-25 28 views
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) 
+0

請發佈'objshapes'聲明。 –

+0

@Robᵩ已添加聲明 – rasul1719435

+0

我不確定您的意思是「動態綁定」。您的示例代碼中沒有綁定。 –

回答

1
Shape *objShapes[3]; 

這聲明objshapes作爲陣列3個指向形狀。

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

這是無意義的。

這是正確的

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

是,這是正確的。 new返回一個指向Rectangle的指針,它可以存儲在一個類型爲pointer-to-Shape的變量中。由於objshapes是指向形狀的指針數組。 objshapes[size]是指向形狀的指針 - 它可以接受指向矩形的指針。

1.假設size是可轉化爲整型,並具有值01,或2

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); 
+0

我無法使用矢量 – rasul1719435

+0

我編輯了我的問題和答案是正確的。 – rasul1719435

+0

@ rasul1719435然後使用另一個容器類型或數組。 – juanchopanza