当前位置 : 主页 > 编程语言 > c语言 >

C++ ---->_模板_

来源:互联网 收集:自由互联 发布时间:2023-09-03
各位好友, 欢迎来到本期博客 !下面, 正式进入 ---- 模板 环节 ---- STL ( 最后一块拼图 ) 下面, 程序是按照 C 语言上的用法习惯, 使用的一种交换数据类型的算法 !非常冗余 !

各位好友, 欢迎来到本期博客 !下面, 正式进入 ---->模板环节 ---->STL最后一块拼图

下面, 程序是按照 C 语言上的用法习惯, 使用的一种交换数据类型的算法 !非常冗余 ! 如下所示 :>

------>测试环节 :>

C++ ---->_模板__类 模板


------>调试环节 :>

C++ ---->_模板__模板_02


可见,上述写法, 重复了许多 相同代码,而下面, 模板的引入, 是真的非常香 !如下所示 :>

----->模板 ~~ 开启 :>

#include <iostream>

using std::cout;
using std::endl;

template<typename T>
void Swap(T& left, T& right)
{
	T tmp = left;
  left = right;
  right = tmp;
}

int main()
{
	int a = 10, b = 12;
  Swap(a, b);
  
  double m = 21.5, n = 23,5;
  Swap(m, n);
  
  char ch1 = 'a', ch2 = 'g';
  Swap(ch1, ch2);
}

----->更好观感的彩色代码 :>

C++ ---->_模板__总结_03


------>调试环节 :>

C++ ---->_模板__new / delete 用法_04


各位好友, 在这里 还要提及一下, 泛型编程 !何为 泛型编程?

---->编写 与类型无关的通用代码, 是代码复用的一种手段。 模板是泛型编程的基础。

而模板 分为两大块 :>函数模板, 类模板

C++ ---->_模板__模板_05

有关上述代码, 用模板实现,还需要注意 :>typename 是用来定义模板参数关键字, 也可以使用 class 

但是不可以使用 struct 进行定义 !

另外, 还需明确一点:>函数模板是一个蓝图, 它本身并不是函数, 是编译器生产特定具体类型函数的模具。


----->函数模板实例化:>

---->用不同类型的参数使用函数模板, 称为函数模板的实例化。

模板实例化分为两大部分 :>隐式实例化 与显示实例化。

(1)隐式实例化 :>让编译器根据实参 --->推演模板参数的实际类型。

----->实现环节 :>

#include <iostream>
using std::cout;
using std::endl;

template <typename T>

T Add(T& left, T&right)
{
	return left + right;
}

int main()
{
	int a = 10, b = 12;
  Add(a, b);
  
  double m = 23.5, n = 27.5;
  Add(m, n);
}

----->更好观感的彩色代码 :>

C++ ---->_模板__函数模板_06

------>调试环节:>

---'>着 反汇编 :>

C++ ---->_模板__函数模板_07


C++ ---->_模板__函数模板_08


(2)显示实例化 :>在函数名之后 <>里面 指定模板参数的实际类型。

在(1)中 运用模板, 实现环节, 会发现传入的实参类型是相同的 !那若不同呢, 会有什么情况:>

----->错误示范 :>

C++ ---->_模板__类 模板_09


----->正确样例 :>

C++ ---->_模板__模板_10



----->解析 :>


C++ ---->_模板__总结_11


各位好友,请注意,上述红色框框, 这是使用显示实例化, 非常关键的一点 !

在前几期, 曾提及过 权限 , 这在 “引用” 一档期 !着重梳理的 !而在这里, 同样涉及到权限


---->如下所示 :>

C++ ---->_模板__模板_12


----->类_模板_

---->未 运用模板 ——>实现栈区 :>

C++ ---->_模板__函数模板_13


------->测试运行结果 :>

C++ ---->_模板__函数模板_14

各位好友, 以上是 没有运用模板, 栈区实现 !但是, 这只能实现 一种类型的算法 !

若 想继续实现 “字符型栈区”,“浮点型栈区”···· 必须再次书写上述同样的代码, 之后更换一下类型而已

上一篇:详解c++STL—容器map/multimap
下一篇:没有了
网友评论