C++笔记

模板 (泛型编程)

函数模板

语法:

template  返回类型 函数名(参数列表)
{
    函数体
}
  • 定义函数模板时typename关键字可以替换成class,效果一样。 template
  • 自动类型推导,必须推导出一致的数据类型T才可以使用。
  • 模板必须要确定出T的数据类型,才能使用。
  • 函数模板调用时,如果利用自动类型推导,不可以发生隐式类型转换。
  • 函数模板调用时,如果显示指定类型,可以发生隐式类型转换。
  • 如果函数模板和普通函数都可以调用,优先调用普通函数。
  • 可以通过空模板参数列表的形式强制调用函数模板。
  • 函数模板可以发生函数重载。
  • 如果函数模板可以产生更好的匹配,优先调用函数模板。
  • 函数模板针对特定类型可以具体化。例如person类型:
//通用模板
template
bool myCompare(T a, T b)
{
...
}
//具体化
template<> bool myCompare(Person p1, Person p2)
  • 利用具体化的模板可以解决自定义类型的通用化。

类模板

语法:

template   class 类名
{ ... };
  • 定义类模板时typename关键字可以替换成class,效果一样。 template
  • 类模板没有自动类型推导的使用方式。只能用显示指定类型。
  • 类模板在模板的参数列表中可以有默认参数类型。
template
class Person
{
...
};
  • 类模板中的成员函数在调用时才创建。

STL标准模板库

智能指针

引用

引用做参数

运算符重载

你可能感兴趣的:(c++,笔记,开发语言)