C++类模板(新手必看)

转自https://blog.csdn.net/qq_31828515/article/details/51851457

一、类模板(template)

类模板是后期C++加入的一种可以大大提高编程效率的方法

关键字template

 

用法:

template <模板参数表>   ----->模板参数表一般格式为class (标识符)

class (类名)

{

     //....

}

 

二、举个栗子

我们要写一个比较类,类里面有两个私有成员

在类里有求私有成员中的最大值和最小值的两个公有成员

用来判断两个数的大小

 

下面我们来进行有无类模板的比较

(1)不用类模板

代码块:

class Compare
{
	public:
		Compare(int a,int b)//构造函数,用于初始化
		{
			x = a;
			y = b;
		}
		int max()//求较大值
		{
			return (x>y)?x:y;
		}
		int min()//求较小值
		{
			return (x<y)?x:y;
		}
	private:
		int x;
		int y;	
};

分析:

我们会发现,这个类只能用于比较整形的大小

比如3,5;调用max返回5,调用min返回3

但是如果比较的是浮点数,那就不可以了
 

(2)用类模板

代码块:

template <class Type>
class compare
{
	public:
		compare(Type a,Type b)
		{
			x = a;
			y = b;
		}
		Type max()
		{
			return (x>y)?x:y;
		}
		Type min()
		{
			return (x<y)?x:y;
		}
	private:
		Type x;
		Type y;
};

分析:

通过对比发现,这两块代码差别并不是很大,仅仅是增加了关键字

还有类型Type替换之前的整型int

在main函数定义时,就可以定义不同类型的对象了

main函数代码:

int main(void)
{	
	compare<int> C1(3,5);
	cout<<"最大值:"<<C1.max()<<endl;
	cout<<"最小值:"<<C1.min()<<endl;
	
	compare<float> C2(3.5,3.6);
	cout<<"最大值:"<<C2.max()<<endl;
	cout<<"最小值:"<<C2.min()<<endl;
	
	compare<char> C3('a','d');
	cout<<"最大值:"<<C3.max()<<endl;
	cout<<"最小值:"<<C3.min()<<endl;
	return 0;
}

三、如何写一个将一个类转化为类模板

(1)写出一个类

(2)将类型需要改变的地方进行替换(如上面的Type)

(3)在类的前面加入关键字template以及函数参数表

(4)定义对象的格式     类名+<Type>+ xx(参数)

比如上面的compare<int> C1(3,5);

(5)切记,模板函数如果定义在类体外,需要在前面加上一行template <函数参数表>。并在类模板名后面用尖括号加上<虚拟函数参数>

比如

template<class Type>

Type compare <Type>::max()

{

       //.....

四、多个参数的类模板


 一个模板中可以具有多个参数,即可以在一个模板中声明多个自定义的类型,如下面这句话:

template < class  T1, class  T2>

  而我们就可以利用这两个参数声明一个具有2种类型的成员。下面我用一个程序说下演示一下这个问题:

#include <iostream>
#include <string>
using namespace std;
template<class T1,class T2=string>
class show
{
public:
    void show1(T1 &a){cout<<"show1:"<<a<<endl;}
    void show2(T2 &a){cout<<"show2:"<<a<<endl;}
};
 
int main()
{
    show<int> a;
    int temp1=5;
    string temp2="Hello,C++!";
    a.show1(temp1);
    a.show2(temp2);
    return 0;
}

 ------->>> 类模板之数组类的定义
  • 29
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值