2021-05-18 函数模板以及类模板的一部分

记录2021-5-18学习c++

今天学习了函数模板以及类模板的一部分

模板就是建立通用的模具,大大提高复用性

函数模板

基本语法:template<typename T>

                  template<class T>

两种都行,没有太大区别。为什么要使用模板的?例如,创建一个交换两个数据的函数,因为传入参数的数据类型不同,如int,double就要写两个,但他们的内容大体上一样。

这时候就要用到模板。

  template<class T>

函数返回类型  函数名称  (参数列表)  {函数的定义}

如:

void swap(T &a,T &b)

表明我先不讨论传入参数的数据类型,统一用T代指。

当传入参数时,编译器自动的判断参数类型。或者由我们显性的规定数据类型{swap<int>(a,b)    \\规定函数用int处理数据}

函数模板注意事项

1.自动推导类型,必须类型一致。不能说的是给a传入int型数据,b传入char型数据。

2.必须有参,使得T的数据类型能够确认。

普通函数与函数模板区别

  • 普通函数调用时可以发生自动类型转换(隐式类型转换)
  • 函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换
  • 如果利用显示指定类型的方式,可以发生隐式类型转换

普通函数与函数模板的调用规则

  1. 如果函数模板和普通函数都可以实现,优先调用普通函数
  2. 可以通过空模板参数列表来强制调用函数模板
  3. 函数模板也可以发生重载
  4. 如果函数模板可以产生更好的匹配,优先调用函数模板

函数模板的局限性

当传入数据类型为自定义数据类型时,有两种方法解决

1.运算符重载。因为以swap函数为例,编译器运行时不认识作用于person(传入的自定义数据类型)的=运算符。

2.具体化函数模板。在函数模板后(哪里都可以)template<> 函数返回类型  函数名称  (自定义参数的列表)  {函数的定义为函数在传入这种参数时提供一个具体的行为。

类模板

建立一个通用类,类中的成员 数据类型可以不具体制定,用一个虚拟的类型来代表。

类模板与函数模板区别:

  1. 类模板没有自动类型推导的使用方式
  2. 类模板在模板参数列表中可以有默认参数
template<class NameType,class AgeType> \\为类中的每个数据类型提供一个抽象性的数据类型
class Person
{
public:
Person(NameType name, AgeType age)      \\有参构造函数
	{
		this->mName = name;
		this->mAge = age;
	}
NameType name;           \\使用抽象数据类型声明两个变量
AgeType age;
};
Person<string,int>  p1  ("张三",18); \\类模板没有自动类型推导,创建对象时要表明数据类型

\\也可以有默认参数,重新定义一下Person展现
template<class NameType,class AgeType=int> 

非专业解释,菜狗的自我笔记

部分笔记内容来自于黑马程序员讲义

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值