当前位置: 首页 > news >正文

C++模板初阶速成

温馨提示:本篇文章依旧是c++速成系列的文章,但和以往有所不同的是,本篇文章带大家简单了解并能够学会使用模板

 泛型编程

概念:编写与类型无关的通用代码,是代码复用的一种手段。

什么是复用?

简单来说就是套用。那么上面的的概念也就可以理解成写一段通用的代码,给其他代码套用

注意:模板是泛型编程的基础。

模板

模板的种类

函数模板、类模板

函数模板

简单解释一下,template:构建模板的一个关键字,typename是定义模板参数关键字,这里的typename也可以是class             注意:千万不能用struct代替class!!!!!

函数模板的实例化

示例

template<typename T>

T Add(T& left, T& right)

{
    return left + right;

}

int main()

{
int a1 = 10, a2 = 20;

Add(a1,a2);

return 0;

}

这个示例就是模板实例化

当然模板实例化也可以这么玩

template<typename T>

T Add(T& left, T& right)

{
    return left + right;

}

int main()

{
int a1 = 10, a2 = 20;

double a3 = 4.0,  a4 = 5.0;

Add(a1,a2);

Add(a1,  (int)a3);

return 0;

}

之所以使用强转,是因为a1和a3的属性不同,又因为我们在设计模板参数时只设计了一个模板参数,因此要使得两个实参的类型保持一致。

拓展小知识

相信看完上面的解释,已经有小伙伴知道定义的模板参数的个数与实参类型的个数有关。

不错,模板参数的个数与实参的类型个数的确有关,而且还是模板参数类型的个数 == 实参的类型个数

总结:模板参数的个数与实参的类型个数有关   注意:这里的类型个数是指不同类型的个数

除了上面的那种通过强转使得实参的类型保持一致外还有一个方法也可以做到

模板的显式实例化

概念:直接给模板规定好是什么类型,不符合该类型的直接进行强转。  

需要注意的是这里并不是所有的类型都可以互相转换的

并且要是出现类似的错误说明我们在写代码的时候一定是哪个模板实例化时的参数写错了才会出现这个bug

类模板

定义格式:

template<typename T>

class 类名

{
public:

成员函数;

private:

成员变量;

};

示例:

template<typename T>

class Stack

{

public:

Stack(size_t capacity = 4)

{

       _a  = new T[capacity];

      _capacity = capacity;

      _size = 0;

}

void  push(const T& data)

    {
        _a[_size] = data;
        ++_size;
    }
private:

T*   _a;

size_t  _capacity;

size_t  _size;

};

注意:模板的声明和定义不建议分离到两个文件中!!!!

类模板的实例化

定义格式:类名<int>  对象名;

示例:

Stack<int>  st1;

这个就是模板实例化。

本篇文章的内容到这里就结束了,虽然本篇文章的内容没有前面类与对象的内容多,但是建议大家把列出了标题的每个知识点去“消化”一下,比如说概念,如果连模板是个什么东西都不知道,那么又如何继续往下学呢,以及我手敲的代码也自行去敲一下,行今天的内容就到这里,我们下篇文章再见。

都看到这里了,给个三连呗,谢谢啦!!!


http://www.mrgr.cn/news/49073.html

相关文章:

  • 分享一些常用的数据库性能监测工具
  • 强基计划揭秘、攻略、机遇全知晓,开启普通学子名校逆袭路
  • Qt-系统文件相关介绍使用(61)
  • GeoScene Pro教程(009):GeoScenePro的空间参考与坐标转换
  • Python Enhancement Proposals,Python 增强提案
  • Python 列表专题:删除元素
  • 【最新华为OD机试E卷-支持在线评测】构成正方形的数量(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 使用SpringMVC搭建WEB项目时报错404的问题排查解决以及web.xml配置文件init-param行标红问题
  • docker-compose 部属netcore
  • 设计一个多环境配置管理系统的实用指南
  • 第十五章:组织保障(15.1信息和文档管理--15.2配置管理)
  • C++学习笔记----9、发现继承的技巧(一)---- 使用继承构建类(1)
  • Mysql(九) --- 事务
  • AI大师工坊文心智能体:雪季旅行者
  • (33)MATLAB信号分析之信号功率、噪声功率、与信噪比
  • 思迅孕婴童重置1001所有权限的语句
  • 麒麟操作系统:解决umount命令卸载USB存储设备时报“device is busy”错误
  • 【实时计算 Flink】DataStream作业大状态导致反压的调优原理与方法
  • C++入门基础知识110—【关于C++嵌套 if 语句】
  • 【Canvas与标牌】立入禁止标牌