转自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;
}

------->>> 类模板之数组类的定义

C++类模板(新手必看)相关推荐

  1. 影视后期制作新手必看!超多片头模板免费分享

    影视后期制作新手必看!超多片头模板免费分享 今年疫情影响,电影院到现在没有还是不能营业,自己也实业了,每天闲的无聊,经过朋友的推荐,自己闲下来学习了一些后期制作技术,学习是比较困难的,其中酸甜苦辣只有 ...

  2. 新手必看的编程介绍,帮你推荐学习方案!

    新手必看的编程介绍,帮你推荐学习方案! VB是什么? ) y0 {6 G# G; j3 B VB 是Visual Basic编程语言 * B. O2 G# z) O1 |- g8 `4 ^ 编写计算机 ...

  3. python中是干嘛的-python是做什么的,新手必看哦!

    原标题:python是做什么的,新手必看哦! ​python , 是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库,Python 已经成为继JAVA,C 之后的的第三大语言.特点:简单易学 ...

  4. python新手入门代码-新手必看:手把手教你入门 Python

    原标题:新手必看:手把手教你入门 Python 本文为 AI 研习社编译的技术博客,原标题 : Learning Python: From Zero to Hero 翻译 |永恒如新的日常校对 | 酱 ...

  5. 帝国霸略老显示服务器连接失败,帝国霸略怎么玩?新手必看技巧攻略[图]

    类型: 大小: 评分: 平台: 标签: 帝国霸略新手怎么玩?对于这款刚刚上线的策略类手游,想必很多玩家都还不太了解其具体的玩法吧!没关系,下面是友情下载小麦整理出来的帝国霸略游戏新手必看技巧攻略,希望 ...

  6. RISC-V入门笔记(新手必看!)

    目录 什么是RISC-V RISC-V 发展 RISC-V指令集 RISC-V特权架构 RISC-V通用寄存器 RISC-V CSR寄存器 M模式CSR寄存器 S模式CSR寄存器 总结 笔者学习RIS ...

  7. 新手必看:生成对抗网络的初学者入门指导

    新手必看:生成对抗网络的初学者入门指导 https://www.cnblogs.com/DicksonJYL/p/9698877.html 本文为 AI 研习社编译的技术博客,原标题 A Beginn ...

  8. nnUNet保姆级使用教程!从环境配置到训练与推理(新手必看)

    文章目录 写在前面 nnUNet是什么? 一.配置虚拟环境 二.安装nnUNet框架 1.安装nnUNet 这一步我遇到的两个问题: 2.安装隐藏层hiddenlayer(可选) 三.数据集准备 nn ...

  9. 【机器学习】新手必看的十种机器学习算法

    在神经网络的成功的带动下,越来越多的研究人员和开发人员都开始重新审视机器学习,开始尝试用某些机器学习方法自动解决可以轻松采集数据的问题.然而,在众多的机器学习算法中,哪些是又上手快捷又功能强大.适合新 ...

  10. cad 怎么显示块句柄_新手必看的CAD小技巧,老师傅精选汇总,三分钟教你学习用处多多...

    零基础新手必看的CAD绘图小技巧,这里分享给你,都是老师傅精选汇总,实实在在用得上,希望能够给你带去帮助! PS:其实CAD入门并不难,难在坚持,如果真的想要入这个行业,一定要你坚持哦! 废话不说了直 ...

最新文章

  1. 将矩阵转为一行_矩阵与矩阵乘积简介
  2. ES6学习笔记--let和const
  3. 转:11个实用但你可能不知道的Python程序库
  4. 无头结点单链表的逆置_第1章第2节练习题11 就地逆置单链表
  5. win10调节屏幕亮度_Win8系统笔记本电脑如何调节屏幕亮度?
  6. 单链表实现一元多项式相加_python面试系列 01如何实现单链表的逆序
  7. lol自动刷人机辅助_LOL星籁歌姬新手怎么玩 星籁歌姬技能出装符文打法攻略 新英雄星籁歌姬辅助攻略...
  8. 蓝牙怎么区分单模和双模_小院闲聊#01#——蓝牙的发展和不同蓝牙之间的关系...
  9. easyui刷新几种方式
  10. Web前后端缓存技术(缓存的主要作用是什么)
  11. 学长分享:计算机专业大一学生如何学习C语言?如何自学C语言?大学C语言学习视频教程谁有?
  12. Github开源微信小程序Demo-用于学习交流
  13. 恒力弹簧设计及寿命预测
  14. 【框架-MFC】MFC 显示和隐藏 星号密码 以及如何预防被查看
  15. 华为手机误删照片,除了相册恢复,还有这招能救命
  16. 小米9预约如此火爆,雷军的供货能跟上吗?
  17. react-native-beacons-manager扫描beacons为空数组(android)--工作笔记
  18. springboot 中favicon.ico 图标不显示问题,后台日志报错找不到favicon.ico 文件问题 解决
  19. python 调用Multipart类型接口上传文件和下载文件
  20. 书评:《软件创新之路-冲破高技术营造的牢笼》

热门文章

  1. 日语高考生能报计算机,日语高考生能报计算机 日语练习册高考
  2. html中input文本框的内容不符合要求时的错误提示
  3. VxLAN知识点总结
  4. 团队管理案例——渐入佳境了
  5. Java分布式事务实现Atomikos
  6. 对固态硬盘ssd进行4k对齐
  7. talend导出数据到oracle,Talend使用步骤.pdf
  8. STM32PWM调速小车速度(全网最强)
  9. s:action标签的使用
  10. UE4数字孪生模型DEMO