C++笔记

模板 (泛型编程)

函数模板

语法:

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

类模板

语法:

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

STL标准模板库

智能指针

  • 自动申请和释放内存
  • unique_ptr

引用

引用做参数

运算符重载

//=号的运算符重载
Person operator=(Person &p)
{
...
}

虚函数和纯虚函数

//虚函数
virtual void myShow()
{
...
}
//纯虚函数
virtual void myShow() = 0;

静态成员

静态成员变量

  • 所有对象共享同一份数据
  • 在编译阶段分配内存
  • 类内声明,类外初始化
  • 可以通过对象进行访问,也可以通过类名直接访问
  • 静态成员变量也是有访问权限的,私有的静态成员变量在类外是无法访问的。

静态成员函数

  • 所有对象共享一个函数
  • 静态成员函数只能访问静态成员变量
  • 可以通过对象进行调用,也可以通过类名直接进行调用。

struct和class的区别

struct和class只有一个区别,就是默认的权限不同。也可以用struct来写类。

  • class的默认权限是私有
  • struct的默认权限是公共
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jimbo_Zhang

有钱的捧个钱场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值