我有一个 uni 分配,我必须在其中实现一个单链表,其中包含从称为 Shape 的通用抽象基类派生的不同对象。
我将链接到 GitHub 以获取类实现:shapes.h、shapes.cpp。到目前为止,它由Shape
及其派生类组成Circle
。也会有Rectangle
,Point
以后还会有Polygon
。
我现在应该实现这些不同形状的单链表。到目前为止,我已经为List
-class 和Node
-class 提出了以下类原型:
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;
};
应该能够以以下样式从 main 调用向 -objectvoid Append(Shape& inData)
添加元素:ShapeList
ShapeList list1;
list1.Append( Circle(5,5,5) );
list1.Append( Rectangle( 4, 10, 2, 4) );
鉴于这些信息,我应该如何实施void Append(Shape& inData)
?我尝试了几种不同的方法,但到目前为止还没有提出正确的解决方案。
参数 to 也完全有可能Append
不是(Shape& inData)
.
编辑:
我已经实现Append(Shape& inData)
了,但它只在某些时候有效:
Circle circle1;
ShapeList list1;
list1.Append( circle1 );
但不与
ShapeList list1;
list1.Append ( Circle(5,5,5) )
到目前为止,我的Append()
-implementation 如下所示:
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;
}
你们觉得这样好吗?