C++基础 (9) 第九天 编译器对模板类的二次编译 类模板 自定义数组类
1 昨日回顾
2 编译器对于模板的二次编译
写一个模板函数 然后进行调用
g++ template.cpp -o template
// 汇编
g++ -S template.cpp –o template.s
:set nu 打开vim行标
查看汇编代码:
20行mySwap<int>对应汇编语言36行的的mySwap
26行mySwap<char>对应汇编语言50行的mySwap
92行 mySwap<int>定义 (函数名加标签 就是这个函数的定义)
121行 mySwap<char>定义(函数名加标签 就是这个而函数的定义)
结论:
通过汇编我们可以看到编译器只给我们生成了int和char的模板函数的实现体
并没有生成全部类型的函数的实现体
第一次编译 C++编译器对模板函数 进行词法分析
如果语法分析没有任何问题 就可以继续执行
第二次编译 根据模板函数的调用来生成具体的摸板
而不是所有的数据类型都生成
通过编译器的第二次编译给我们生成两个模板函数的重载
3类模板的基本语法
4实现复数的模板类在一个文件中
实现+和-操作符重载:
<<输出操作符重写:
滥用友元函数:
案例中 这个函数本来是可以写在内部的,但是你非要写在外部,引发了一些问题:
举例:
在上面已经定义的Complex类下面定义了一个mysub方法,
声明了mysub是一个模板函数,
因为引用了类中私有变量,所以如果想引用它必须在类中声明
于是,在类中声明这个函数,
但是问题是mySub并没有被声明是模板函数 不能在后面加<T> 所以需要在代码最开始加模板函数声明
在代码最开始(即Complex类前面) 声明mySub为模板函数
但是这里还没有声明 模板类Complex 所以还需要在前面进行声明,
最终代码:
5实现复数类在多文件中
Complex.h:
改成hpp:
见到hpp说明是一个模板函数封装的 既可以
结论:
(hpp)
所以就不要拆了 直接写到类中。
6中午回顾
7类模板中的static
结论: a1 a2 a3指向同一个static变量
b1 b2 b3指向同一个static变量
8自定义的数组模板类-实现基本数据类型的封装
8自定义的数组模板类-实现基本数据类型的封装
9自定义数组模板类-实现自定义类型
https://github.com/eret9616/MyVector
结论: 如果想往<>容器中存放一个自定义类型的时候
一定要重写拷贝操作符和等号操作符 否则会有浅拷贝的风险。
C++基础 (9) 第九天 编译器对模板类的二次编译 类模板 自定义数组类的更多相关文章
- C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取
一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...
- Objective-C 基础教程第九章,内存管理
目录 Object-C 基础教程第九章,内存管理 前言: 对象生命周期 引用计数 RetainCount1项目例子 对象所有权 访问方法中的保留和释放 自动释放 所有对象放入池中 自动释放池的销毁时间 ...
- Linux基础知识第九讲,linux中的解压缩,以及软件安装命令
目录 Linux基础知识第九讲,linux中的解压缩,以及软件安装命令 一丶Linux Mac Windows下的压缩格式简介 2.压缩以及解压缩 3.linux中的软件安装以及卸载 1.apt进行安 ...
- C++基础 (8) 第八天 数组指针 模板指针 C语言中的多态 模板函数
1昨日回顾 2 多态的练习-圆的图形 3多态的练习-程序员薪资 4员工管理案例-抽象类和技术员工的实现 employee.h: employee.cpp: technician.h: technici ...
- 模板函数(template function)出现编译链接错误(link error)之解析
总的结论: 将template function 或者 template class的完整定义直接放在.h文件中,然后加到要使用这些template function的.cpp文件中. 1. 现 ...
- Xcode6中如何使用自定义的类模板
说到IOS类的模板,有些人感觉很陌生,但是只要有开发过IOS程序的人,其实都用过类的模板,只不过是用的系统自带的类的模板. 例如创建一个ClassTemplateVC继承于UIViewControll ...
- 【Ecmall】ECMall2.x模板制作入门系列(认识ECMall模板)
ECMall2.x模板制作入门系列之1(认识ECMall模板) 从ECMall2.0全新架构发布以来,随着版本的不断更新,ECMall已经逐渐走向一个稳定时期,是时候整理一些实用教程了.下面给大家带来 ...
- c++模板函数声明定义分离编译错误详解
今天看到accelerated c++上有个简单的vector容器的实现Vec,就再vs2008上编译了下: ///// Vec.h #ifndef GUARD_VEC_H #define GUARD ...
- 【C++】模板简述(四):模板为什么不支持分离编译?
上文简述了类模板相关功能,本文主要简述为什么模板不支持分离编译? 在C++中,为了一个项目的规范,我们通常把代码归为三类:声明文件.实现文件.测试文件. 比如,我要用C++实现一个链表,那么就会创建这 ...
随机推荐
- (18)使用模板(thymeleaf-freemarker)【从零开始学Spring Boot】
整体步骤: (1) 在pom.xml中引入thymeleaf; (2) 如何关闭thymeleaf缓存 (3) 编写模板文件.html ...
- [bzoj1084][SCOI2005]最大子矩阵_动态规划_伪·轮廓线dp
最大子矩阵 bzoj-1084 SCOI-2005 题目大意:给定一个n*m的矩阵,请你选出k个互不重叠的子矩阵使得它们的权值和最大. 注释:$1\le n \le 100$,$1\le m\le 2 ...
- Spring MVC-环境设置(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_environment_setup.htm 说明:示例基于Spring MVC 4 ...
- POJ 2029
二维树状数组可解此题 #include <iostream> #include <cstdio> #include <cstring> #include <a ...
- html里显示中文乱码的解决的方法
在HTML开头统一规范下编码格式: <meta http-equiv="Content-Type" content="text/html; charset=utf- ...
- 自己主动化的在程序中显示SVN版本号
有时候会有这种情况,策划拿着应用过来提一个bug,但我们却不好确定策划的手机上装的应用相应的是那个代码版本号. 为了解决问题.我们希望能在应用上显示出当前应用所相应的代码版本号,即svn版本号. 构想 ...
- Window上python 开发--1.搭建开发环境
事实上在开发python最好在ubuntu环境下,简单也便于扩展各个package.可是我的linux的电脑临时不在身边.还的我老婆的电脑win7没办法啊. 因为python的跨平台性.在window ...
- DexClassLoader和PathClassLoader类载入机制
0x00 在DexClassLoader和PathClassLoader载入Dex流程一文中,我们分析了dex文件怎样形成了DexFile结构体.本文中解说类载入机制,实际上就是生成ClassObje ...
- nyoj--170--网络的可靠性(水题)
网络的可靠性 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 A公司是全球依靠的互联网解决方案提供商,也是2010年世博会的高级赞助商.它将提供先进的网络协作技术,展示其 ...
- 【BZOJ3926】【ZJOI2015】诸神眷顾的幻想乡 广义后缀自动机
题目: 题目在这里 思路&做法: 参考的题解 既然只有\(20\)个叶子节点, 那么可以从每个叶子节点往上建一颗\(trie\)树, 然后合并成一棵大的\(trie\)树, 然后构建广义后缀自 ...