C++类模板和函数模板初识

  • 宏定义
  • 函数的重载:
  • 内存管理方式
    • 交互给用户管理 ----- C语言
    • GC机制,垃圾回收机制 ----- Java

 

1、模板类和模板函数

  1. 宏定义:简单的替换不安全,而且不能实现复杂的函数
  2. 函数的重载:需要重载多个版本
  3. 模板:一段程序实现能够处理不同的类型的对象,使参数的多态(使相同的逻辑代码处理不同的数据类型),是一个实现多态的工具。
    1. 分类:类模板、函数模板、成员函数模板。
  4. 函数模板
    1. 可以进行重载的
    2. 格式template
    3. 实际上被编译了两次:一次是实例化之前检查函数模板是否存在语法错误;另一次是在实例化期间检查调用是否有效。
    4. 支持非类型参数(占位参数, 默认参数) template
      • 默认参数时,可以默认值也可以在调用的时候更改传入的参数
      • 占位参数时,

    1. 调用:
      1. 显示调用:调用时用户自己指定类型
      2. 隐式调用:编译器自主选择最佳适合的函数类型
  1. 模板函数的实例化
    1. 隐式实例化 template
      1. 特点:实例化多次(在每个文件都会实例)
    2. 显示实例化 template int add(int, int);
      1. 特点:只实例化一次
  2. 类模板 (类中的成员变量类型用typename代替)
    1. 格式:template
    2. 支持非类型参数(占位参数, 默认参数) template
    3. 只可以显示地定义类对象!!!
  3. 类模板的实例化
    1. 隐式实例化 template
    2. 显示实例化 template class Test
  4. 模板成员函数 ---- 增强成员函数的通用性
    1. 使用时机:当成员函数参数为其他的类型时,需要typename另外一个类型
    2. 实现:在要实现的地方重新template新的类型X;
  5. 模板类的全特化和偏特化
    1. 全特化:模板符合多种类型,但是对于某种特定的类型需要作出特定的处理,则此时需要对特定的类型单独写出来一个类模板来针对该类型。
    2. 偏特化:对template中的几个类型中某一个单独的类型作出特殊处理。

 

 

你可能感兴趣的:(c++)