1分钟理清楚C++类模板和模板类区别

目录

1、定义区别       

2、程序举例


1、定义区别       

         类模板和模板主要关注点是后一个单词。

        类模板:主要描述的是模板,这个模板是类的模板。可以理解为一个通用的类,这个类中的数据成员,成员函数的形参类型以及成员函数的返回值类型不用具体的指定,这些类型都是虚拟的。在使用类模板进行对象定义的时候,才会根据对象的实际参数类型来替代类模板中的虚拟类型。通俗一点来说,可以看作是做蛋糕的模具。类模板标准定义格式如下:

template <typename 类型参数>
class 类名
{
       类成员声明
};

         或者:

template <class 类型参数>
class 类名
{
       类成员声明
};

        (1)template:这是声明类模板的关键字,表明这是一个类模板。

        (2)尖括号<>中,typename和class的作用都一样,都是用作来申明后面的参数是一个虚拟的数据参数类型。

        (3)类型参数:用C++标识符:Type或者T来表示,表示这是一个虚拟的数据类型名,此时在类模板中不给定具体的数据类型,实例化成模板类后,就需要给定具体的数据类型。

        模板类:主要描述的是类,这个类使用类模板进行声明。将类模板中的虚拟类型参数指定成一个具体的数据类型参数。通俗一点来说可以看作是通过蛋糕模具做出来的蛋糕。


2、程序举例

        1,定义一个比较两个元素大小的类模板;

        2,使用该类模板进行实例化,实现用模板类定义对象。

#include <iostream>
using namespace std;
template <class T> //声明一个模板,虚拟数据类型名为T
class Compare //类模板名为Compare
{
   public :
   Compare(T a, T b)
   {
       x = a;
       y = b;
   }
   
   T max( )  //类模板中的成员函数
   {
       return (x > y) ? x : y;
   }

   private :
       T x;
       T y;
};

int main()
{
Compare<int>fun1(5,8);       //用类模板定义对象fun1,此时T被int替代 
Compare<float>fun2(9.1,9.7); //用类模板定义对象fun2,此时T被float替代 
Compare<char>fun3('a','h');  //用类模板定义对象fun3,此时T被char替代 
cout<<"最大值是:"<<fun1.max()<<endl;   
cout<<"最大值是:"<<fun2.max()<<endl;
cout<<"最大值是:"<<fun3.max()<<endl;
return  0;
}

        最终程序打印结果依次为:

最大值是:8
最大值是:9.7
最大值是:h

     可以从程序举例中看出使用类模板Compare进行实例化,生成了3个类型分别为Compare<int>、Compare<float>、Compare<char>的模板类,这3个模板类经实例化后又生成了3个对象成员fun1、fun2、fun3。对象成员可以调用类模板中定义的成员函数max()。类模板表示了通用的类,模板类表示了经过实例化后带具体数据类型参数的类。

        另外,在类模板中,类模板的成员函数是在类模板体内定义。而类模板中的成员函数也可以在类模板体外定义。那么就需要遵循以下规则:

        (1)需要在成员函数定义之前进行模板声明;
        (2)在成员函数名前加上"类名<类型参数>::";

        之前的程序举例中main函数之前的类模板声明就要改为如下格式:

template<typename T>   //声明一个模板,虚拟数据类型名为T
class Compare
{
  public :
   Compare(T a, T b)
   {
       x = a;
       y = b;
   }
   
   T max( )  //类模板中的成员函数
   
   private :
       T x;
       T y;
};

template<typename T> //在成员函数定义之前进行模板声明
T Compare<T>::max() //在成员函数名前加上"类名<类型参数>::"
{
    return (x > y) ? x : y;
}

↓↓↓更多技术内容和书籍资料获取敬请关注“明解嵌入式”↓↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sharemaker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值