我遇到了设计问题。我被要求为某个问题设计一个设计,我需要一些列表,还有一个队列(我需要自己创建,不允许使用STL)。为了提高实现效率,我考虑创建一个通用列表,如下所示:创建一个包含指向'Data'的指针的节点,一个空类。然后,我想要制作列表或队列的任何类(最后一句语法是否正确?),我只是将它作为数据的子类。这是制作通用列表的唯一方法(我认为),因为我们不允许使用void *。 当我想在某个列表中使用某个类的某个方法时,问题就开始了。我不能这样做,因为'数据'不知道这个功能。在Data中创建虚拟函数是反逻辑和丑陋的,我们也不允许使用任何向下转换。 有没有办法克服使用通用ADT的问题?或者我必须创建特定列表吗? 非常感谢你! 编辑:我们也不允许使用模板。
答案 0 :(得分:0)
关于列表和队列,也许您可以采用STL采用的相同方法:只需创建列表,然后堆叠,作为列表的适配器,您只需从其中推送和弹出。
关于那些看似严苛的约束,难道我不认为你的目标是使用模板吗?
而不是创建和清空类,如果不包含任何方法,则根本不为您提供服务,请使用模板,如下例所示:
template<typename T>
class List {
class Node {
public:
Node(T* d)
{ data.reset( new Data( d ) ); }
T * getData()
{ return data; }
Node * getSig()
{ return sig; }
private:
std::auto_ptr<T> data;
Node * sig;
};
List()...
// Lots of more things...
};
您可以在此处找到更多信息:
http://www.cplusplus.com/doc/tutorial/templates/
希望这有帮助。