首页 > 编程语言 >c++之模版类

c++之模版类

时间:2023-03-13 16:35:09浏览次数:47  
标签:Compare 模版 c++ template 类型 class 模板

一.模板类的定义

函数模板可以用来创建一个通用功能的函数,以支持多种不同形参,进一步简化重载函数的函数体;
意义:对于功能完全一样,只是参数类型不同的函数,能写一段通用代码是用于多种不同的数据类型,使代码的可重用性大大提高,从而提高软件的开发效率,达到“一类多用”的目的。

1.1 定义

template <class T> //声明一个模板,虚拟类型名为T。注意:这里没有分号。
class Compare //类模板名为Compare
{
public :
   Compare(T a,T b){
      x=a;y=b;
   }
   T max(){
      return (x>y)?x:y;
   }
   T min(){
      return (x<y)?x:y;
   }
private :
   T x,y;
};

1.2 模板类与普通类比较 [增加模版类声明+虚拟类型参数名T]

1.声明模板类时要增加一行

template <class 类型参数名>

template意思是“模板”,是声明类模板时必须写的关键字。在template后面的尖括号内的内容为模板的参数表列, 关键字class(也可以用typename)表示其后面的是类型参数。

2.固定的类型名更换成虚拟类型参数名T

在建立类对象时,如果将实际类型指定为int型,编译系统就会用int取代所有的T,如果指定为float型,就用float取代所有的T,这样就能实现“一类多用”

1.3 模板类成员函数体外实现 

template <class T>
T Compare<T>::max( )
{//类型+作用域引用
     return (x > y)? x : y;
}

1.4 模版类实例化

Compare <int> cmp(4, 7);
Compare <float> cmp(4.0, 7.0);

二.模板类的注意事项

1. 类模板的 类型参数可以有一个或多个,每个类型前面都必须加class,如:

template <class T1,class T2>
class someclass
{
    ...
};

//***********
//在定义对象时分别代入实际的类型名
someclass<int, double> obj;

2. 和使用类一样,使用类模板时要 注意其作用域,只能在其有效作用域内用它定义对象
3. 模板可以有层次, 一个类模板可以作为基类,派生出派生模板类。但有关这方面的知识实际应用较少。

 

标签:Compare,模版,c++,template,类型,class,模板
From: https://www.cnblogs.com/david-china/p/17211855.html

相关文章

  • 使用Python训练好的决策树模型生成C++代码
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、决策树模型二、解析决策树模型1.模型分解2.构建决策二叉树3.生成代码3.1生成python代......
  • AI机器学习模型python到C/C++的转换播
    了解过机器学习的人应该都知道python的sklearn库非常好用的机器学习助手。从sklearn导入某个机器学习的库,调用fit函数即可生成模型,用来预测测试数据。1、保存模型如......
  • C++类内定义引用成员
    遵循三个规则C++类内可以定义引用成员变量,但要遵循以下三个规则:不能用默认构造函数初始化,必须提供构造函数来初始化引用成员变量。否则会造成引用未初始化错误。构造函......
  • vscode 配置 linux C++ 开发环境 和 终端配置 oh-my-zsh
    1.配置linuxC++开发环境vscode安装C/C++;CodeRunner插件。#安装gdbsudoapt-getupdatesudoapt-getinstallgdb点运行按钮就可以调试和运行代码了......
  • C/C++模拟汽车牌号生成与管理系统[2023-03-12]
    C/C++模拟汽车牌号生成与管理系统[2023-03-12]1、当用户选号时,可随机生成两个未被使用的牌号供用户选择其中之一;2、可以查看已经分配的牌号及用户信息。源码https://......
  • C++银行卡管理系统[2023-03-12]
    C++银行卡管理系统[2023-03-12]第一次编程作业:(1)将代码阅读、调试通过;(2)添加功能:包括增加资金转账明细、按时间统计账号转账信息等。头文件:bankcard.h源文件:mai......
  • Mapping of Windows Handles to Objects(Windows句柄到(C++)对象的映射)
     TN003:MappingofWindowsHandlestoObjects技术文章003:Windows句柄到(C++)对象的映射ThisnotedescribestheMFCroutinesthatsupportmappingWindow......
  • C++学习注意点
    我们在使用STL中string容器进行查找时需要注意到find()和rfind()的使用特点,find()是从左往右进行查找,而rfind()是从右往左查找。stringstr111="abcdefbc";intpos1=......
  • c++ 类关系
    1UML中类如何表示+表示public-表示private#表示protected2UML中类关系符号3六大关系3.1泛化(继承)关系泛化是类与类之间的关系表达classCat{public:......
  • 华为2018-8-12软件开发优招面试(C/C++)——上合地区
    下午2:00开始的,第一感受是:小姐姐超级多,第二感受是:超级热。话不多说,直接切入正题总共两面:一面是技术面(40min),一面是综合面(20min)技术面:总共的流程如下:1.自我介绍2.介绍一下项......