如何将列表类转换为模板化链接类,以便它可以处理任何数据。下面是一个使用整数的类。我想将它转换为模板化类,以便它适用于任何数据类型
#ifndef _INTLIST_H_
#define _INTLIST_H_
#include <iostream>
class IntListNode
{
protected:
int value;
public:
IntListNode* nxt;
IntListNode(int = 0, IntListNode* = NULL);
IntListNode(const IntListNode&);
IntListNode& operator=(const IntListNode&);
int val() const;
void val(int);
IntListNode* next() const;
};
class IntList
{
protected:
IntListNode* nhead;
IntListNode* tail;
int csize;
public:
IntList();
IntList(const IntList&);
IntList& operator=(const IntList&);
int size() const;
IntListNode* head() const;
void push(int);
void pop();
void clear();
~IntList();
};
#endif
这就是我所做的
#ifndef _INTLIST_H_
#define _INTLIST_H_
#include <iostream>
template <class T>
class IntListNode
{
protected:
T value;
public:
IntListNode* nxt;
IntListNode(int = 0, IntListNode* = NULL);
IntListNode(const IntListNode&);
IntListNode& operator=(const IntListNode&);
T val() const;
void val(T);
IntListNode* next() const;
};
template <class T>
class IntList
{
protected:
IntListNode<T> nhead;
IntListNode<T>tail;
int csize;
public:
IntList();
IntList(const IntList&);
IntList& operator=(const IntList&);
int size() const;
IntListNode* head() const;
void push(T);
void pop();
void clear();
~IntList();
};
#endif
答案 0 :(得分:1)
IntLisNode
更改为ListNode
并将其设为类模板。IntLis
更改为List
并将其设为类模板。使用ListNode<T>
中的List
代替IntListNode
。int
使用T
,在函数签名中替换T const&
。这是一个快速改造。
#ifndef _LIST_H_
#define _LIST_H_
#include <iostream>
template <typename T>
class ListNode
{
protected:
T value;
public:
ListNode* nxt;
ListNode(T const& in, ListNode* = NULL);
ListNode(const ListNode&);
ListNode& operator=(const ListNode&);
T const& val() const;
void val(T const&);
ListNode* next() const;
};
template <typename T>
class List
{
protected:
ListNode<T>* nhead;
ListNode<T>* tail;
int csize;
public:
List();
List(const List&);
List& operator=(const List&);
int size() const;
ListNode<T>* head() const;
void push(T const& val);
void pop();
void clear();
~List();
};