hi everyone!
I have a problem in implementing a common class interface.
my assignment is to implement a data structure list, and I have define
a class template list_base, it's an abstract class, only define the
common interface of all various list. The definition is below:
template <typename T>
class list_base
{
public:
struct list_node;
virtual ~list_base() = 0;
virtual void push_back(const T&) = 0;
virtual void push_front(const T&) = 0;
virtual void insert(const list_node *node, const T&) = 0;
virtual void earse(list_node *node) = 0;
virtual void pop_back() = 0;
virtual void pop_front() = 0;
virtual T back() const = 0;
virtual T front() const = 0;
virtual list_node* search(const T&) const = 0;
virtual size_t size() const = 0;
};
then I implement a circular list just like this
template <typename T>
class circular_list : public list_base<T>
{
public:
circular_list();
~circular_list();
virtual void push_back(const T&);
virtual void push_front(const T&);
virtual void insert(const list_node *node, const T&);
virtual void earse(list_node *node);
virtual void pop_back();
virtual void pop_front();
virtual T back() const;
virtual T front() const;
virtual list_node* search(const T&) const;
virtual size_t size() const;
private:
circular_list(const circular_list &);
circular_list & operator = (const circular_list &);
list_node *head;
size_t size_;
};
how could I implement the list node structure?
because different list type need different list node type, e.g.
single-linked list is just want a next pointer, but a double-linked
list want a prev pointer besides a next.
define another list_node_base??
thank you for answering it for me, and forgiving my poor English.