C 模板实现的栈结构以及分析思考.doc

C 模板实现的栈结构以及分析思考.doc

ID:51422531

大小:86.50 KB

页数:6页

时间:2020-03-24

C 模板实现的栈结构以及分析思考.doc_第1页
C 模板实现的栈结构以及分析思考.doc_第2页
C 模板实现的栈结构以及分析思考.doc_第3页
C 模板实现的栈结构以及分析思考.doc_第4页
C 模板实现的栈结构以及分析思考.doc_第5页
资源描述:

《C 模板实现的栈结构以及分析思考.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、从类模板引发的思考C++屮使用了模板来减少方法相同但是类型不一样带来的函数重载以及大量复制代码的问题。这里主要说说类模板类模板的定义:tcmplatc

2、igelLenglh();voidprint();private:intm_top;inim_nLength;Type*m_pAir;};函数的实现:函数实现既可以放在类定义体内,又可以放在类定义体外,但是不管放在体内还是体外都必须放在头文件屮,这点和inline函数有点类似。分离编译:如果声明和定义分别放在h文件和epp文件呢?这个时候如果在英他程序屮用到了模板类屮的函数,那么就会出现l>nain.obj:errorLNK2019:无法解析的夕卜部符号"public:_thi5collStackz

3、>::"Stackz(void)*(??l?$Stack^H90QXE9XZ).该符号在函数_na:n中彼引用l>nain.obj:errorUE2019:无法解柠的夕卜部符号"public:void_thiscallStacks::print(void)*(?printQ?jStacks8H@@QAEXXZ)>该符号在函斂』ain审祓引用1obj:«rrorLMK2019:无去解析的处部符E**publicmt_th)scd[lSt«cksgetLength(void)*(^g

4、etLength®^$StacksQHOGQAEHXZ)9该苻号g函數_gin中被引用1)nain.obj:errorLMK2019:无法解折的夕卜部符号"public:bool_thizcollStacks::izEntpty(void)*(?i5Er»pty^??$Stackz9M9QQAE_lJX2)>该苻号在函数中被引用l>nain.obj:errorLKK2019:无法解卅的夕卜部符号"public:ini_.thiscallStacks.pop(void)*(?pop09SS

5、tacks0H?5QAEMXZ)»该符号衣函刼_nain中祖引用诸如此类的错误,错误原因说的很清楚,就是说没有找到相关的函数定义。那为什么模板类的非模板类在分离编译上这一点有区别呢?我们知道分离编译是以编译单元为单位,所谓的编译单元就是epp文件,编译器在进行编译的时候,会首先进行预编译(展开头文件),然后进行编译,将单独的编译单元生成2进制文件obj。最后编译器再利川link把用到的函数变量等链接起來生成可执行文件exeo这就是编译的过程。但是这个过程在遇到模板类时候会发生…些变化,如果编译器能将模板类的

6、实现函数编译成obj文件,那么在这些函数屮遇到Type(类型位置),编译器该怎么将代码翻译成对应的汇编代码呢,一些pull,push该对应多少字节呢,这些祁是未知的,所以从理论上讲,即便我们将模板类的声明和实现相互分离,但是在生成的对应obj文件屮不会有一个函数的2进制代码的。类模板的特殊编译:那么既然obj屮没有二进制函数,main函数又是如何调用模板类中的函数呢,我们知道一般的类,main函数调用它只需要知道一个link地址就行,但是针对模板类就不一样了,它会在main函数所在的cpp里面把用到的函数实

7、例化(就是用具体类型替换通用类型),这样就可以调用它了,因为要替换,所以就必须知道函数的定义了,这就是为什么必须得在一个文件中实现模板类的声明和定义。测试和验证:通过在模板类屮增加一个这样的函数templatevoidSlacks::prinl(){cout«'ThisisatestJloveyou”«MIloveyouJloveyouM«endl;}然后我们在main中调用print函数,在生成的debug文件中用notepad++打开main.obj,我们可以看到

8、有这样的字符出现:K00Thisisatest91loveyouK00ZloveyourIloveyou®ffl0U^jhKB亘?师何亟唾师画师画师妊囲<囲域囲函輕Q碗9堀嫩瓯9唾9晅3师13;里••/ill..僮?画圈唾画师9嗣雄囲<@3據囲區嗣羽鐵辱翻画翻画;星这就说明了问题,main.卬p屮实例化了函数的定义。附带栈结构实现的C++源代码//Stacks.h#pragmaonce#include

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。