C++模板——(3)类模板
归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏? + 留言?📝
勤奋,机会,乐观是成功的三要素!
一起加油!
目录
????????💦例如,声明两个类,分别用来比较整数和浮点数的大小。
💦例:编写一个类模板,比较两个整数、浮点数和字符数据的大小。
?
一、类模板的定义和使用:
? ? ? ? 昨天介绍了函数模板,建立了一个通用函数,将很多个处理不同数据类型、相同逻辑功能的函数抽象成一个统一的函数,用来简化程序设计。对于类的声明,也存在同样的问题。如几个类的逻辑功能相同,但数据类型不同,却要重复性的写很多代码。
????????💦例如,声明两个类,分别用来比较整数和浮点数的大小。
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++模板的理解,请持续关注我哦!!!?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!