C++使用类模板定做

来源:百度知道 编辑:UC知道 时间:2024/06/03 23:42:21
书上的代码都会有问题```
泪```
#include<iostream>
using namespace std;
template<typename T>
struct Node{
Node(T&d):c(d),next(0),pref(0){}
T c;
Node*next,*pref;
};
template<typename T>
class List{
Node<T>*first,*last;
public:
List();
void add(T&c);
void remove(T&c);
Node<T>*find(T&c);
void print();
~List();
};
template<typename T>
List<T>::List():first(0),last(0){}
template<typename T>
void List<T>::add(T&n){
Node<T>*p=new Node<T>(n);
p->next=first,first=p;
last?p->next->pref:last=p;
}
template<typename T>
void List<T>::remove(T&n){
Node<T>*p=find(n);
if(!p)return;
p->next?p->next->pref:last=p->pref;
p->pref?p->pref->next:first=p->next;
delete p;
}
template<typename T>
Node

主要有3个错误:
1).使用string 的操作符,没有加载头文件,即:include <string>
2).List<Cat> 中的add函数原型声明是:void add(Cat&c);参数是Cat对象的引用。而在main方法中,却是用的string类型的实际参数,造成参数的不匹配。
3).List<T>中的add函数原型声明是:void add(T&c);参数是对T类型的引用。而main函数中,用常量作为实参是不对的。如果都用变量是可以用引用的。

程序修改如下:
#include <iostream>
#include <string>
using namespace std;

template<typename T>
struct Node
{
Node(T&d):c(d),next(0),pref(0){}
T c;
Node*next,*pref;
};

template<typename T>
class List
{
Node<T>*first,*last;
public:
List();
void add(T c);
void remove(T&c);
Node<T>*find(T&c);
void print();
~List();
};

template<typename T>
List<T>::List():first(0),last(0){}

template<typename T>
void List<T>::add(T n)
{
Node<T> *p=new Node<T>(n);
p->next=first,first=p;
l