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

スマートポインタを使用する代わりにrawポインタを使用している場合は、deleteすべてのポインタを呼び出して、シェイプが使用するメモリの割り当てを解除する必要があります。

標準ライブラリコンテナの使用に消極的であり、の配列ではなく、の配列があることを明確にしたので、編集Shape*します。次に、配列にShapeデータを入力できます。

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

これは、objshapesをShapeへの3つのポインターの配列として宣言します。

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

これは無意味です。

これは正しいです

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

はい1、それは正しいです。new長方形へのポインタを返します。これは、形状へのポインタ型の変数に格納できます。objshapesはShapeへのポインタの配列です。objshapes[size]は、ポインタから形状へのポインタです。これは、ポインタから長方形へのポインタを受け入れることができます。

size1.それが整数型に変換可能であり、値が、、、0または1であると仮定します2

于 2012-10-25T14:54:16.123 に答える