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) 第九天 编译器对模板类的二次编译 类模板 自定义数组类的更多相关文章

  1. C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取

    一.前言 当下微信公众号几乎已经是每个公司必备的,但是大部分微信公众账号用户体验都欠佳,特别是涉及到用户绑定等,需要用户进行复杂的操作才可以和网站绑定,或者很多公司直接不绑定,而是每次都让用户填写账号 ...

  2. Objective-C 基础教程第九章,内存管理

    目录 Object-C 基础教程第九章,内存管理 前言: 对象生命周期 引用计数 RetainCount1项目例子 对象所有权 访问方法中的保留和释放 自动释放 所有对象放入池中 自动释放池的销毁时间 ...

  3. Linux基础知识第九讲,linux中的解压缩,以及软件安装命令

    目录 Linux基础知识第九讲,linux中的解压缩,以及软件安装命令 一丶Linux Mac Windows下的压缩格式简介 2.压缩以及解压缩 3.linux中的软件安装以及卸载 1.apt进行安 ...

  4. C++基础 (8) 第八天 数组指针 模板指针 C语言中的多态 模板函数

    1昨日回顾 2 多态的练习-圆的图形 3多态的练习-程序员薪资 4员工管理案例-抽象类和技术员工的实现 employee.h: employee.cpp: technician.h: technici ...

  5. 模板函数(template function)出现编译链接错误(link error)之解析

    总的结论:    将template function 或者 template class的完整定义直接放在.h文件中,然后加到要使用这些template function的.cpp文件中. 1. 现 ...

  6. Xcode6中如何使用自定义的类模板

    说到IOS类的模板,有些人感觉很陌生,但是只要有开发过IOS程序的人,其实都用过类的模板,只不过是用的系统自带的类的模板. 例如创建一个ClassTemplateVC继承于UIViewControll ...

  7. 【Ecmall】ECMall2.x模板制作入门系列(认识ECMall模板)

    ECMall2.x模板制作入门系列之1(认识ECMall模板) 从ECMall2.0全新架构发布以来,随着版本的不断更新,ECMall已经逐渐走向一个稳定时期,是时候整理一些实用教程了.下面给大家带来 ...

  8. c++模板函数声明定义分离编译错误详解

    今天看到accelerated c++上有个简单的vector容器的实现Vec,就再vs2008上编译了下: ///// Vec.h #ifndef GUARD_VEC_H #define GUARD ...

  9. 【C++】模板简述(四):模板为什么不支持分离编译?

    上文简述了类模板相关功能,本文主要简述为什么模板不支持分离编译? 在C++中,为了一个项目的规范,我们通常把代码归为三类:声明文件.实现文件.测试文件. 比如,我要用C++实现一个链表,那么就会创建这 ...

随机推荐

  1. Linux磁盘分区方案(转)

    硬盘分区的各个分区的意义 尽管可以根据我们已经提到的分区原则,Linux装在一个单一的大分区中,但更好的主意是将它分开.综合了单一分区的简单性和多分区的灵活性,我们推荐以下配置.请注意:如果你想安装L ...

  2. oracle BBED 直接改动数据库block块

    1.BBED配置 1)将相应文件放到$ORACLE_HOME/rdbms/mesg和$ORACLE_HOME/rdbms/lib中:     --将lib中bbedus.msb和bbedus.msg ...

  3. HDU3117-Fibonacci Numbers(矩阵高速幂+log)

    题目链接 题意:斐波那契数列,当长度大于8时.要输出前四位和后四位 思路:后四位非常easy,矩阵高速幂取模,难度在于前四位的求解.  已知斐波那契数列的通项公式:f(n) = (1 / sqrt(5 ...

  4. GNU TeXmacs 1.99.8 发布,所见即所得科学编辑器(看看老实的GUI)

    GNU TeXmacs 1.99.8 已发布,这是一个支持各种数学公式的所见即所得编辑器,可以用来编辑文本.图形.数学.交互内容,它的界面非常友好,并且内置高质量的排版引擎. 更新内容: bug 修复 ...

  5. js面试题--js的继承

    js是门灵活的语言,实现一种功能往往有多种做法,ECMAScript没有明白的继承机制.而是通过模仿实现的.依据js语言的本身的特性,js实现继承有下面通用的几种方式 1.使用对象冒充实现继承(该种实 ...

  6. Cache操作类

    封装类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys ...

  7. 【BZOJ 2982】 combination

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2982 [算法] lucas定理 [代码] #include<bits/stdc ...

  8. VS中的路径宏

    说明$(RemoteMachine)设置为“调试”属性页上“远程计算机”属性的值.有关更多信息,请参见更改用于 C/C++ 调试配置的项目设置.$(References)以分号分隔的引用列表被添加到项 ...

  9. 3.ThinkPHP入门---视图

    视图:MVC三大组成部分,负责信息的展示和输出 1.视图的创建 创建的位置需要是在分组目录下的view目录下余控制器同名的目录中. 2.视图的展示 在smarty和tinkphp都是使用diaplay ...

  10. MBR分区表格式 - 简明概述

    目前硬盘主要有MBR和GPT分区两种格式,前者是Windows XP之前时代主流的分区格式,后者则是现在Windows 8之后主流的分区格式.(Windows 7需要通过一些手段能实现支持GPT,而W ...