Shape と呼ばれる共通の抽象基本クラスから派生したさまざまなオブジェクトを含む単一リンク リストを実装する必要がある uni 割り当てがあります。
クラスの実装については、GitHub にリンクします: shape.h、shapes.cpp。これまでのところ、Shape
とその派生クラスで構成されていCircle
ます。Rectangle
、以降もありPoint
ますPolygon
。
ここで、これらのさまざまな種類の形状の単一リンク リストを実装する必要があります。これまでのところ、List
-class と -classの次のクラス プロトタイプを作成しましたNode
。
class Node
{
public:
Node() {}
friend class ShapeList;
private:
Shape* data;
Node* nextNode;
};
class ShapeList
{
public:
ShapeList(){head = NULL;}
void Append(Shape& inData);
private:
Node* head;
};
void Append(Shape& inData)
-objectへの要素の追加ShapeList
は、次のスタイルで main から呼び出すことができる必要があります。
ShapeList list1;
list1.Append( Circle(5,5,5) );
list1.Append( Rectangle( 4, 10, 2, 4) );
この情報が与えられた場合、どのように実装すればよいvoid Append(Shape& inData)
ですか? 私はいくつかの異なるアプローチを試みましたが、これまでのところ正しい解決策を思いつきませんでした.
パラメータ toAppend
が 以外のものであることも完全に可能です(Shape& inData)
。
編集:
私は実装しましAppend(Shape& inData)
たが、時々しか機能しません:
Circle circle1;
ShapeList list1;
list1.Append( circle1 );
しかし、一緒ではありません
ShapeList list1;
list1.Append ( Circle(5,5,5) )
これまでのところ、私のAppend()
実装は次のようになります。
void ShapeList::Append(Shape& inData)
{
//Create a new node
Node* newNode = new Node();
newNode->data=&inData;
newNode->nextNode=NULL;
//Create a temp pointer
Node *tmp = head;
if (tmp != NULL)
{
//Nodes already present in the list
//Traverse to the end of the list
while(tmp->nextNode != NULL)
tmp = tmp->nextNode;
tmp->nextNode=newNode;
}
else
head=newNode;
}
それは大丈夫ですか?