zoukankan      html  css  js  c++  java
  • 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

    结论: 如果想往<>容器中存放一个自定义类型的时候

    一定要重写拷贝操作符和等号操作符 否则会有浅拷贝的风险。

  • 相关阅读:
    iOS 面试题搜集
    iOS 常用第三方类库、完整APP示例
    iOS 键盘遮挡输入 解决办法
    iOS UIColor RGB HEX
    iOS APP性能优化
    iOS Swift 数组 交换元素的两种方法
    iOS CoreData primitive accessor
    iOS Start developing ios apps (OC) pdf
    iOS 传值方式
    iOS IB_DESIGNABLE IBInspectable @IBDesignable @IBInspectable 加速UI开发
  • 原文地址:https://www.cnblogs.com/eret9616/p/10514023.html
Copyright © 2011-2022 走看看