归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言📝
勤奋,机会,乐观是成功的三要素!
一起加油!
目录
编辑
一、类模板的定义和使用:
💦例如,声明两个类,分别用来比较整数和浮点数的大小。
🔑说明:
💦例:编写一个类模板,比较两个整数、浮点数和字符数据的大小。
🔑说明:
二、总结:
三、共勉:
一、类模板的定义和使用:
昨天介绍了函数模板,建立了一个通用函数,将很多个处理不同数据类型、相同逻辑功能的函数抽象成一个统一的函数,用来简化程序设计。对于类的声明,也存在同样的问题。如几个类的逻辑功能相同,但数据类型不同,却要重复性的写很多代码。
💦例如,声明两个类,分别用来比较整数和浮点数的大小。
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++模板的理解,请持续关注我哦!!!