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

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

相关推荐
两颗泡腾片11 分钟前
C++提高编程学习--模板
c++·学习
你好!蒋韦杰-(烟雨平生)2 小时前
扫雷游戏C++
c++·单片机·游戏
程序视点2 小时前
Wise Duplicate Finder 重复文件查找工具 - 永久免费专业版文件去重工具
前端·windows
monicaaaaan2 小时前
搜索二维矩阵Ⅱ C++
c++·线性代数·矩阵
zh_xuan3 小时前
duiLib 自定义资源目录
c++·ui
西红柿煎蛋3 小时前
C++11的可变参数模板 (Variadic Templates) 是如何工作的?如何使用递归解包一个参数包 (parameter pack)?
c++
女程序猿!!!3 小时前
如何不让android studio自动换行
windows
源代码•宸4 小时前
深入浅出设计模式——创建型模式之原型模式 Prototype
c++·经验分享·设计模式·原型模式
晨曦学习日记4 小时前
Leetcode239:滑动窗口最大值,双端队列的实现!
数据结构·c++·算法
程序视点4 小时前
免费数据恢复软件推荐:Wise Data Recovery 6.2.0 激活版使用指南
前端·windows