定义类模板的时候 函数实现的时候 为什么要在类名后加T 如classname::fuction

microxdd 2008-08-07 02:32:33




#include <iostream>

template<typename T> class List{
public:
List();
void Add(T&);
void Remove(T&);
T* Find(T&);
void PrintList();
~List();
protected:
struct Node{
Node* pNext;
T* pT;
};
Node *pFirst; //链首结点指针
};

template<class T> List<T>::List()
{
pFirst = 0;
}

template<class T>
void List<T>::Add(T& t)
{
Node* temp = new Node; //①
temp->pT =&t; //②
temp->pNext = pFirst; //③
pFirst = temp;//④
}

template<class T>
void List<T>::Remove(T& t)
{
Node *q = 0; //用来定位待删的结点
if(*(pFirst->pT)==t) //T类中==须有定义
{
q = pFirst;
pFirst = pFirst->pNext; //待删结点在链首时的脱链
}
else
{
for(Node* p=pFirst; p->pNext; p=p->pNext) //顺链查找

if(*(p->pNext->pT)==t){
q = p->pNext;
p->pNext = q->pNext; //⑤
break;
}
}
if(q){
delete q->pT; //⑥
delete q; //⑦
}
}

template<class T>
T* List<T>::Find(T& t)
{
for(Node* p=pFirst; p; p=p->pNext)
if(*(p->pT)==t)
return p->pT;

return 0;
}

template<class T>
void List<T>::PrintList()
{
for(Node* p=pFirst; p; p=p->pNext)
cout <<*(p->pT)<<" "; //须有T的友元处理T对象输出

cout <<endl;
}

template<class T>
List<T>::~List()
{
Node* p;
while(p = pFirst){
pFirst = pFirst->pNext;
delete p->pT;
delete p;
}
pFirst = 0;
}



























为什么template<class T>
List<T>::~List()

而不是template<class T>
List::~List()

...全文
518 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
taojian_hhu 2008-08-07
  • 打赏
  • 举报
回复
你也说了是模板了,那肯定是要加上类型的啊
晨星 2008-08-07
  • 打赏
  • 举报
回复
当然,这样解释有点牵强,因为别人会问:“如果C++当初选择不支持模板成员函数,你又会怎么说?”
所以,说到底,这就是一种语法规定,没啥好解释的。
晨星 2008-08-07
  • 打赏
  • 举报
回复
如果没有的话,写成:
template<class T>
void List::PrintList() {
}
这表示有一个类,名字叫List,注意它是类,不是模板,然后这个类有一个模块成员函数,叫PrintList。
freeyou11 2008-08-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xkyx_cn 的回复:]
模板类需要实例化才进行编译,编译时会替换为相应的类型,如果用List::如何找到相应的函数呢?
[/Quote]

K行天下 2008-08-07
  • 打赏
  • 举报
回复
因为模板类型不一定
xkyx_cn 2008-08-07
  • 打赏
  • 举报
回复
模板类需要实例化才进行编译,编译时会替换为相应的类型,如果用List::如何找到相应的函数呢?
jay的Fans 2008-08-07
  • 打赏
  • 举报
回复
对于模板而言List <T>才是类型。
WPS Office 2019 是一款功能丰富的办公软件套装,它整合了文字、表格、演示、PDF 等组件,具备体积小巧、功能丰富、兼容性强等特点,能满足日常办公的多种需求。 功能组件丰富:包含 WPS 文字、WPS 演示、WPS 表格、WPS PDF 等组件,可用于文档编辑、表格计算、幻灯片制作、PDF 处理等,支持 DOC、DOCX、XLS、XLSX、PPT 等多种格式,能与 Microsoft Office 较好地兼容。 支持云存储与协作:用户登录 WPS 账号后,可实现多终端、跨平台的数据同步,还能与他人协同办公,文档可通过微信、QQ 等社交平台一键分享。 PDF 功能强大:提供沉浸式 PDF 阅读体验和稳定的编辑服务,支持一键编辑 PDF 文档内容。借助 OCR 技术,可精准转换文档、表格、PPT、图片等格式的文件。 界面设计优化:具有全新视觉设计,默认皮肤舒适清爽,还支持桌面背景、界面字体、皮肤、格式图标等个性化设置。同时,文档标签可拖拽成独立窗口或合并,用户可自主选择文档显示方式,还能将文件放置在不同工作区,便于分类浏览与管理。 内置实用工具:内置了简单的网页浏览器,点击文档中的链接会默认用其打开,可进行网页添加到首页、另存为 PDF 等操作。此外,“应用中心” 集成了输出转换、文档助手、安全备份等多种实用功能。 模板资源丰富:稻壳商城提供了大量模板、范文、图片等素材资源,涵盖求职简历、总结计划、合同协议等常见文档类型,方便用户快速创建专业文档。 表格功能特色突出:支持通过关键词快速切换工作表,设有阅读模式和护眼模式。还可分类合并单元格,以及拆分合并单元格并填充内容。公式编辑器中可轻松完成公式嵌套,筛选时可通过 “仅筛选此项” 一步完成特定值筛选,还能根据筛选条件生成动态分析图表。另外,“特色功能” 和 “智能工具箱” 菜单中包含 PDF

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧