C++初阶 | 模板

C++初阶 | 模板

0.引言

今天,咱们来唠唠C++中一个超级好用的工具------"模板"(●'◡'●)

1.函数模板

🔅形式:

  • ☆单个模板:template <typename/class T>
    😄这里的typename和class写一个就行了哈
  • ☆多个模板:template <typename/class T, typename/class K>

例:

template < typename T >

void Swap( T& left ,T& right)

{

T temp =left;

left=right;

right=temp;

}

★:Swap不是只有一个函数,他是一组函数(它的功能是交换两个同类型的数据)

2.类模板

template < typename T >

class Stack

{

public:

Stack(size_t capacity =4 )

{ _array = new Tcapacity;

_capacity = capacity;

_size = 0;

}

void Push (const T& data);

private:

T* _array;

size_t _capacity;

size_t _size;

};

⭐类模板中的成员函数全是模板函数

⭐ 在类模板中进行声明和定义分离

⭐类模板是在编译时检查检查数据类型,而是不是在运行时检查(运行时检查的一般都是多态性的性质)

3.模板的实例化

隐式实例化(实参类型推演模板参数)

复制代码
int a1=10, a2=20;
double d1=10.1,d2=10.2;
cout<<Swap(a1,a2)<<endl;
cout<<Swap(d1,d2)<<endl;   //同种类型的数据交换

cout<<Swap(a1,(int)d2)<<endl;
cout<<Swap(double)a1,d2)<<endl;  //不同类型的数据交换,先转换成同种数据类型的数据,再交换

显示实例化 (显示指定模板参数)

复制代码
cout<<Swap<int>(a1,a2)<<endl;
cout<<Swap<double>(a1,a2)<<endl;

🚩函数参数定义的是对象,模板参数定义的是类型

🚩函数模板和普通函数可以同时存在,但是,普通函数优先。(成品优先)但是,在显示实例化时,可以先调模板

cout<< Swap< int > ( a1 , a2 )<< endl ; //此处如果有两个Swap,其中一个数函数模板,而另一个是普通函数,会先调用函数模板。

4.模板类

🚩定义:用一个或多个类型参数(如 T )作为占位符,编写通用类,可在实例化时指定具体类型。

🚩作用:避免重复编写相似逻辑的代码,提高代码复用性,如C++的 vector 、 list

🚩类模板vs模板类👇👇👇

  • 不同:

    概念本质
    类模板是一种模板定义,是创建类的蓝图或模式,它本身不是一个具体的类,而是描述了一系列类的共同结构和行为。模板类则是类模板经过实例化后得到的具体类,是可以用来创建对象的实体

    语法形式

    类模板的定义使用 template 关键字声明模板参数,如 template 。而模板类是在类模板实例化 时产生的,使用类模板名并指定具体类型参数来表示,如 vector 是 vector 类模板针对 int 类型实例化后的模板类

    使用阶段

    类模板在编译时进行解析和处理,编译器根据类模板的定义和实例化的参数生成相应的代码。模板类在运行时被使用,用于创建对象并调用其成员函数和访问成员变量

  • 相同点

    目的相同

    都是为了实现代码的复用,通过参数化类型来创建具有不同数据类型的类或对象,以适应多种数据类型的处理需求。

    基于泛型编程思想

    都利用了泛型编程的理念,将数据类型作为参数进行传递,使得代码可以在不针对具体类型进行修改的情况下,适用于多种不同类型的数据。

5.总结

希望大家可以和小邓儿一起学习和进步哈O(∩_∩)O

都看这么久了呢,别忘了一键三连哦😘😘😘

相关推荐
汉克老师3 小时前
CSP-J 初赛(以满分为目标):第二十七课 《图的遍历——BFS广度优先搜索——像“水波纹”一样,一层一层地搜索》
c++·csp-j·小学生·学c++编程
pt10433 小时前
网络自动化Python课程:利用Cisco NSO编排网络服务
运维·网络·自动化
闻缺陷则喜何志丹3 小时前
【动态规划】P3609 [USACO17JAN] Hoof, Paper, Scissor G
c++·算法·动态规划·洛谷
啦啦啦~~~2223 小时前
PC端+安卓端阅读器推荐!开源本地小说阅读器软件,
android·论文阅读·windows·开源软件·福昕阅读器
汉克老师3 小时前
CSP-J 初赛(以满分为目标):第二十六课 《图的遍历——DFS深度优先搜索——从“树的先序遍历”走进真正的图世界》
c++·csp-j·小学生·学c++编程
程序猿编码3 小时前
基于GGML的C++17轻量化语音推理引擎:说话人识别与语音分析技术全解析
开发语言·c++·pytorch·深度学习·神经网络·大模型
影视飓风TIM4 小时前
C++哈希表深度剖析:冲突处理、rehash、迭代器与unordered容器封装
c++·哈希算法·散列表
全栈技术负责人4 小时前
DeepSeek Harness 业务工具权限插件 dsh-tool-permission设计思路
网络·算法·ai·ai编程
希望奇迹很安静4 小时前
等级保护测评
网络·数据库
Zenova EdgeOS4 小时前
Linux eBPF 工业边缘性能观测实战
linux·服务器·网络