C++模板——(3)类模板

2024-01-09 21:34:10

归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏? + 留言?📝
勤奋,机会,乐观是成功的三要素!

一起加油!

目录

?编辑

一、类模板的定义和使用:

????????💦例如,声明两个类,分别用来比较整数和浮点数的大小。

🔑说明:

💦例:编写一个类模板,比较两个整数、浮点数和字符数据的大小。

?🔑说明:

二、总结:?

三、共勉:?


?

一、类模板的定义和使用:

? ? ? ? 昨天介绍了函数模板,建立了一个通用函数,将很多个处理不同数据类型、相同逻辑功能的函数抽象成一个统一的函数,用来简化程序设计。对于类的声明,也存在同样的问题。如几个类的逻辑功能相同,但数据类型不同,却要重复性的写很多代码。

????????💦例如,声明两个类,分别用来比较整数和浮点数的大小。

class Compare_int{
	private:
		int x,y;
	public:
		Compare_int(int a,int b)
		{
			x=a;
			y=b;
		}
		int max(int a,int b)
		{
			return a>b?a:b 
		} 
		int min(int a,int b)
		{
			return a<b?a:b 
		} 
};
class Compare_float{
	private:
		float x,y;
	public:
		Compare_float(float a,float b)
		{
			x=a;
			y=b;
		}
		float max(float a,float b)
		{
			return a>b?a:b;
		}
		float min(float a,float b)
		{
			return a<b?a:b;
		}
};

????????这两个类的声明的类型不同,但逻辑功能非常相似,有很强的重复性。我们可以运用函数横板的思路,为类也声明一个通用的类模板,使得实例化类中的某些数据成员、某些成员函数的参数或者返回值,能取任意的数据类型。?

????????类模板的一般定义格式如下:

template <class T>

class? 类名

{

? ? ?};

🔑说明:

  • (1)template是定义类模板的关键字,总是放在模板定义和声明的最前面。
  • (2)<classT>必须用尖括号<>括起来,其中T为类型参数,它实际上是一个虚拟的类型名,当使用类模板时,T被替换为某种实际的数据类型(例如int,char,float 等)从而实现类多用。T也可以用其他合法的标识符替换。
  • (3)类的定义方式与之前讲到的类的定义类似。
  • (4)类模板是对一组类的抽象,某一个类是对类模板的实例化。

在声明了一个类模板后,如何使用它,如何使它变成一个实际的类,又如何生成一个具体的对象??

一般形式为:
类模板名<实际类型名> ?????对象名(参数表);

下面通过具体的例子说明类模板的定义和使用方法.

💦例:编写一个类模板,比较两个整数、浮点数和字符数据的大小。

#include<iostream>
using namespace std;
template <class T>
class Compare{
	private:
		T x,y;
	public:
		Compare(T a,T b)
		{
			x=a;
			y=b;
		}
		T max();
		T min();
}; 
template <class T>
T Compare<T>::max()
{
	return x>y?x:y;
}
template <class T>
T Compare<T>::min()
{
	return x<y?x:y;
}
int main()
{
	Compare<int> cmpi(4,9);
	cout<<"两个整数的最大值:"<<cmpi.max()<<endl; 
	cout<<"两个整数的最小值:"<<cmpi.min()<<endl; 
	Compare<float> cmpf(3.93,7.78);
	cout<<"两个小数的最大值:"<<cmpf.max()<<endl; 
	cout<<"两个小数的最小值:"<<cmpf.min()<<endl; 
	Compare<char> cmpc('k','q');
	cout<<"两个字符的最大值:"<<cmpc.max()<<endl;
	cout<<"两个字符的最小值:"<<cmpc.min()<<endl;
	return 0;
}

?🔑说明:

????????该程序定义了一个类模板 Compare<T>,其模板类型参数为 T。在该类模板中,构造函数的两个形参 a、b,两个私有的数据成员 x、y,以及两个成员函数 max()和 min()的返回类型,都是用模版类型参数T声明的变量。

????????该程序的主函数中生成了三个模板类,并生成了三个对象,其语句分别为:Compare<int>cmpi(4,9);(此时T被指定的类型为int,类对象名为cmpi。)Compare<float>cmpf(3.93,7.78);(此时T被指定的类型为float,类对象名为cmpf。)Compare<char>cmpc('k','p')(此时T被指定的类型为char,类对象名为cmpc。)总结定义类模板时应注意以下几点:
(1)声明类模板时,要在类的前面加一行语句:?

template<class 虚拟类型参数>

(2)用类模板定义对象时用以下形式:?

类模板名<实际类型名>? ? ? ? ? ? ? ? 对象名;
? ? ? ? ? ? ?类模板名<实际类型名>? ? ? ? ?? ? ? ?对象名(参数表);

(3)如果在类模板外定义成员函数,应写成类模板形式?:

template<class 虚拟类型参数>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 函数类型类模板名<虚拟类型参数>::成员函数名(函数形参表)

{......}

二、总结:?

  • ??template是定义类模板的关键字,总是放在模板定义和声明的最前面。
  • <classT>必须用尖括号<>括起来,其中T为类型参数,它实际上是一个虚拟的类型名。
  • 类模板是对一组类的抽象,某一个类是对类模板的实例化。

三、共勉:?

????????以上就是我对C++模板——(3)类模板的理解,希望本篇文章对你有所帮助,也希望可以支持支持博主,后续博主也会定期更新学习记录,记录学习过程中的点点滴滴。如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对C++模板的理解,请持续关注我哦!!!?

文章来源:https://blog.csdn.net/2301_80585598/article/details/135488881
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。