函数模板与类模板(C++)

模板

一、函数模板

一、函数模板的定义

函数模板不是一个实在的函数,编译器不能为其生成可执行代码。定义函数模板后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定其功能。

模板就是一种对类型进行参数化的工具。

二、函数模板的作用
函数模板是用于生成函数,增加了程序的可重用性,不需要建立多个重载函数(即不用因为要作用于不同数据类型建立多个函数)。

三、函数模板的使用
可以使用typename,也可以使用class

#include<iostream>
using namespace std;
template <typename T>//T(也可以用其他名称,如C,d等)表示的是数据类型的模板等,在执行时会按照传递的实际参数来决定其具体类型

void function(T a,T b){//建立的一个函数模板,T代表的数据类型取决于传递的实际参数
    cout<<a<<" "<<b<<endl;
}

int main(){
    int a=10,b=10;
    function(a,b);//调用模板函数,因为传递的是int类型,所以此时T会变成int类型
    return 0;
}

其他情况
1)不需要将模板函数的形参都用T来表示,也可以用其他类型

template <typename T>
void function(T a,int b){//这样写表明只有a的类型取决于传递参数
    cout<<a<<" "<<b<<endl;
}

2)同一个函数的T不能同时表示两种数据类型

#include<iostream>
using namespace std;
template <typename T>

void function(T a,T b){
    cout<<a<<" "<<b<<endl;
}

int main(){
    int a=10double b=10;
    function(a,b);//此时a传递的是int型,b传递的是double型,T无法同时表示两种类型,这样会出错
    return 0;
}

3)不允许使用多个模板参数列表

#include<iostream>
using namespace std;

template <typename C>
template <typename T>//错误,只能声明一个函数模板
void function(C a, C b) {
	cout << a << " " << b;
}

int main() {
	int a = 10;
	int b = 20;
	function(a, b);

}

二、类模板

类模板是用来生成类的。声明与模板函数类似。
但类模板调用时必须指定输入了什么数据,也就是尖括号不能省略,这点与函数模板不一样。
声明:

template<class T1,class T2,class T3,……>//声明类模板里的数据类型
class 类名{//可以用T1,T2,T3来作为数据类型来表示数据
……
}
int main()
{
  类名<class T1,class T2,class T3,……> 对象(……)//调用时必须指定输入了什么数据,也就是尖括号不能省略,这点与函数模板不一样
}

例子:

#include<iostream>
#include<string>
using namespace std;

template <class T1,class T2,class T3>//类模板里成员变量的数据类型的声明

class person {//建立类模板
public:
	person(T1 _name, T2 _sex, T3 _age) {//建立构造函数
		name = _name;
		sex = _sex;
		age = _age;
	}
	void print() {
		cout << "姓名:" << name << "\n性别:" << sex << "\n年龄:" << age << endl;
	}
private:
	T1 name;
	T2 sex;
	T3 age;
};

int main() {
	person<string, string, int>s("宇哥", "男", 23);//通过传递参数将string赋予T1和T2,将int赋予T3
	s.print();
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值