1、模板观念与函数模板

part1:
一、C++模板简介(1)

int Max(int a,int b)
{
	return (a>b)? a:b;
}
long Max(long a,long b)
{
	return (a>b)? a:b;
}
char Max(char a,char b)
{
	return (a>b)? a:b;
}

以上三个函数都是比较大小,但是由于返回和输出类型不同,导致需要写三个函数(函数重载)。未解决这个问题,引入模板(template)
C++模板简介(2)

template<typename T> T MAX(T a,T b)
{
	return (a>b)? a:b;
}
T是泛化的,非具体的。
使用模板,可以省去一堆冗余代码。
模板:是C++的一种特性,允许函数或类(对象)通过泛型(generic types)的形式表现。
两种模板:类模板(class template):使用泛型参数的类
				函数模板(Function template):使用泛型参数的函数

C++模板简介(3)
模板实例化
1、实例化:就是将上面的T指定一个具体的类型。这个函数才确定。
显示实例化:直接给出T的类型。
隐形实例化:不给出T,根据a,b的定义编译器推导给出T的类型

二、C++函数模板(1)
函数模板就是参数化的一族函数,也就是表示一类函数。

template<typename T>//告诉编译器这是个模板函数,并且参数为T
inline T Max(const T&a,const T& b)
{
	return (a>b)?a:b;
}

C++函数模板(2)
calss代替typename,语法上是一样的

C++函数模板(3)
模板函数的使用

#include "stdafx.h"
#include<iostream>
using namespace std;
template <typename T>inline T Max(const T& a, const T& b) {
	return (a > b) ? a : b;
}


int main()
{
	int a = 5, b = 35;
	int c = Max(a, b);
	cout << c;
    return 0;
}

注意:参数类型不能为不同类型
C++函数模板(4)
模板实例化
用具体的型别替代模板参数T的过程叫做实例化,从而产生一个模板实例
C++函数模板(5)
结论:模板被编译了两次
1)没有实例化之前,检查末班代码本事是否有语法错误
2)实例化期间,检查模板代码的调用是否合法。
C++函数模板(6)
参数推导
模板参数是由传递的实参决定(例子中传入的a为int型,所以模板参数为int)
Max(1,2);
Max(1,3.0);//错误,两个参数类型不相同
强制转换:static_cast(3.0)
显式转换 :Max(1,2,0);
C++函数模板(7)
函数模板重载

	inline T Max(const int& a, const int& b)template <typename T>inline T Max(const T& a, const T& b)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值