模板函数和类模板基础(部分)

模板函数和类模板基础(部分)

模板技术:可以使类型参数化,编写代码时可以忽略类型。避免重复编写。

优点就是好维护。毕竟写得多错的多。

模板函数:和普通函数差不多,为了让编译器能够区分,就要写上template
template<class/typname T>//它之后写的函数就可以用T替代函数类型,但是值得注意的是,它只对下面第一个函数起作用

举个例子:

template<class/typname  T>
void myswap(T &a , T &b){
	T tmp = a;
	a = b;
	B = tmp;}
Void test(){				
	int a = 1;
	int b = 2;
	myswap(a,b);//自动转换类型	也可以显式转化myswap<int>(a,b)
	cout<<a<<" "<<b<<endl;}

两者区别:普通函数可以进行函数类型的自动转换,模板函数必须是严格的类型匹配
example:
当创建两个myswap;

template<class T>
	void myswap(T &a,T &b)
     void myswap(int a,char b)
   //当调用函数类型不相同时,用的是2,相同时用的是1.原因见两者区别

那模板函数和普通函数一起调用的规则是什么呢:
• 它可以像普通函数一样被重载;
• 但是优先考虑普通函数;
• 若函数模板可以产生更好的匹配,就选模板;
• 可以通过空模板实参列表的语法限定编译器只能通过模板匹配

类模板: 定义和使用与函数模板类似,但其在表示像组,表,图等数据结构就显得很重要
这些数据结构的表示不受所包含的数据类型的影响。
调用时不能自动进行类型推导,必须显示指定类型。

• 单个类模板举例:

template<class T>			
	class  Person{
	public:
		Person(T id , T age){
			Mid = id;
			Mage  = age;
			}
		
		T Mid;
		T Mage;
		};
//调用时;
int main(){
   person<int>p(10,20);}//必须加入函数类型;

• 类模板派生类模板:

template<class T>
	class  Person{
	public:
		Person(T id , T age){
			this-> Mid = id;
			this-> Mage  = age;
			}
		
		T Mid;
		T Mage;
		};
	//一定要加int,因为需要给它分配内存
	//class subperson : public person<int>{};(这是派生非类模板)
	//所以派生类模板是:
	Template<class T>
	class  subperson : public person<T>{};

• 类模板类基本实现和运用:

#include <bits/stdc++.h> 
	using namespace std;
		template<class T1,class T2>
		struct  Person{
		public:
				 Person(T1 name , T2 age){
				this->Mname = name;
				this->Mage  = age;
				}
		public:
			T1 Mname;
			T2 Mage;
			void show(){
				cout<<Mname<<" "<<Mage<<endl;
				}
			};
		void test(){
			Person<string,int>p("zhangsan",20);
			p.show();
		}
	int main(){
		test();
		return 0;
	}
	

Int main(){
   person<int>p(10,20);}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值