c++ 浙大翁恺老师 面向对象程序设计听课笔记收录(三十四)模板一

c++ 浙大翁恺老师 面向对象程序设计听课笔记收录(三十四)模板一


《课时34 模板 I》

什么是templates?
有两种东西,它们结构相同,类型不同
泛类嘛!但是这样不安全。
在这里插入图片描述

泛型编程,重用源代码,类型成为参数
1,function template函数模板,是一种模板(用来做出函数)
在这里插入图片描述
2,class template类模板,是一种模板(用来作出类)

3,template function使用template作出的 function
eg: sort function(你要sort不同类型)
a template function is an instantiation实例化 of a function template
在这里插入图片描述
4,template class使用template作出的 class
eg: containers such as stack, list, queue,容器的具体操作与类型无关

比如排序函数,就是函数模板,参数类型不同
swap function template

template<class T>   // template 与 class关键字,template关键字往下一行那个东西就是
void swap(T& x, T& y) { // template,如果下一行是函数, 那个函数就是template
   T temp = x; 				  // 如果下一行是类, 那个类就是template; 用T将来可以是任意类型
    x = y;
    y= temp;
}

注意下图中关于template与 class 与 T的关键字的含义:
在这里插入图片描述
可以声明变量,代表返回类型等等
模板是一种声明,而不是定义,编译器只是记下模板,然后知道了具体的类型才定义
编译器会为你zone一个函数定义出来,tempate function 就是 function template的instantiation/实例化(这个发生在你调用这个函数的时候)
std::string s(“string”);
在这里插入图片描述
函数调用的顺序:
在这里插入图片描述

函数实例化 Function Instantiation
编译器推断模板类型从实际的形参类型推断;
也可以在尖括号显式地表达参数的类型
template
void foo(void)
foo();
foo();
在这里插入图片描述

类模板

类模板class templates
classes parameterized by types
abstract operations from the types being operated upon
define potentially infinite set of classes
another step toward reuse
typical use: container uses

在这里插入图片描述

Vector<int> v1(100)  // 尖括号int为T, 圆括号为构造函数参数

在这里插入图片描述
类模板的成员函数怎么写:每一个都是函数模板
在这里插入图片描述

问答补充:
1.如果没有template,能做自动类型转换时是会做的。但是一旦有了模板之后,就不再做自动类型转换了。
因为模板其实就是个模具,它没那么智能,它只是直接填充。
2.
1.首先会检查唯一的函数匹配
2.检查唯一的函数模板匹配
3.如果上述都没有完全匹配的,就按照普通的函数重载,参数类型转换进行就可以了。

1.0是double,没有加f后缀的带小数点的数是double而不是float。这个知识点容易忘掉。

笔记来源:
https://study.163.com/note/noteIndex.htm?id=271005&type=0#/noteIndex?resType=0&resId=394177&sortType=0

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值