c++中的template类模板与函数模板

c++中的template类是一种很高端的用法。它是一种模板,有类模板、函数模板等。

一、类模板

想实现swap函数,但又不会实现对任意类的交换,怎么办?

template大法!

template <typename T>
void myswap(T &__a,T&__b){
	T __c;
	__c=__a;
	__a=__b;
	__b=__c;
}

解释一下:

1.typename

typename是用来规定后面的T是类型名,而非变量名。如果是两个double类型交换,那么T就为double,如果是两个结构体交换,那么T就是结构体名。

2.取地址符 ‘&’

对于要交换的两个数__a和__b,如果不加’&’,就只是在myswap函数里面交换,而对数本身没有影响。’&'实质上是一种指针,指向要交换的两个数。

例:

scanf("%d %d",&a,&b);

如果在较为复杂的程序里面不加’&’,就会编译错误或结果错误。

3. ___a与___b

为什么要用__a和__b呢?

在写头文件的过程中,如果不这样写,有时就会导致编译错误,即:头文件中的变量与程序之间的变量重复。

二、模板函数

对于以下程序片段:

template <class S>
class A{
	private:
		S __d;
		int __e;
	public:
		S plus(S __a,S __b);
		A();
};

你既可以将它写成一个头文件,也可以直接写在程序中。

class与typename相似。

引用时需这样: \text{引用时需这样:} 引用时需这样:

#include<bits/stdc++.h>
#include "templatetry.h"
using namespace std;
template <class S> A<S>::A() {}
template <class S> S A<S>::plus(S __a,S __b) {
	return __a+__b;
}
int a,b;
int main(){
	cin>>a>>b;
	myswap(a,b);
	A<int> c;
	cout<<a<<' '<<b<<endl;
	cout<<c.plus(a,b);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值