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 T[capacity];

_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

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

相关推荐
Abigail_chow1 小时前
EXCEL如何快速批量给两字姓名中间加空格
windows·microsoft·excel·学习方法·政务
love530love3 小时前
【笔记】在 MSYS2(MINGW64)中正确安装 Rust
运维·开发语言·人工智能·windows·笔记·python·rust
南郁3 小时前
007-nlohmann/json 项目应用-C++开源库108杰
c++·开源·json·nlohmann·现代c++·d2school·108杰
网硕互联的小客服4 小时前
如何利用Elastic Stack(ELK)进行安全日志分析
linux·服务器·网络·安全
浩浩测试一下4 小时前
Authpf(OpenBSD)认证防火墙到ssh连接到SSH端口转发技术栈 与渗透网络安全的关联 (RED Team Technique )
网络·网络协议·tcp/ip·安全·网络安全·php
代码搬运媛4 小时前
“packageManager“: “[email protected]“ 配置如何正确启动项目?
windows·webpack
菠萝014 小时前
共识算法Raft系列(1)——什么是Raft?
c++·后端·算法·区块链·共识算法
海棠蚀omo5 小时前
C++笔记-C++11(一)
开发语言·c++·笔记
leagsoft_10035 小时前
联软NSPM自动化策略管理 助力上交所加速国产化替代提升运维效率
运维·网络·自动化
小道士写程序5 小时前
Qt 5.12 上读取 .xlsx 文件(Windows 平台)
开发语言·windows·qt