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

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

相关推荐
名字不好奇4 分钟前
在C++中 如何实现java中的Stream
java·c++
喵星人工作室8 分钟前
C++传说:神明之剑0.2.1
开发语言·c++·游戏
Ashley_Amanda11 分钟前
Python 常见问题梳理
开发语言·windows·python
深圳南柯电子13 分钟前
深圳南柯电子|EMC电磁兼容测试系统:5G时代应对频段的干扰挑战
网络·人工智能·互联网·实验室·emc
w陆压19 分钟前
2.TCP三次握手、四次挥手
网络·网络协议·计网知识点
紫色的路26 分钟前
TCP消息边界处理的精妙算法
c++·网络协议·tcp/ip·算法
知乎的哥廷根数学学派26 分钟前
基于高阶统计量引导的小波自适应块阈值地震信号降噪算法(MATLAB)
网络·人工智能·pytorch·深度学习·算法·机器学习·matlab
DeepFlow 零侵扰全栈可观测27 分钟前
DeepFlow 实践:利用 eBPF 实现覆盖从网关到数据库的全栈分布式追踪
网络·分布式·云原生·云计算
松涛和鸣30 分钟前
51、51单片机
c语言·网络·单片机·嵌入式硬件·tcp/ip·51单片机
chamu9933 分钟前
C++ 的可调用对象
开发语言·c++