[C++模板初阶]函数模板,类模板

💖💖💖欢迎来到我的博客,我是anmory💖💖💖
又和大家见面了
欢迎来到C++探索系列
作为一个程序员你不能不掌握的知识
先来自我推荐一波
个人网站欢迎访问以及捐款
推荐阅读
如何低成本搭建个人网站
专栏:动画详解leetcode算法题
C语言知识
玉桂狗yay

函数模板

函数模板格式

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

函数模板原理

函数模板原理

函数模板的实例化

1.隐式实例化

template<class T>
 T Add(const T& left, const T& right)
 {
 return left + right;
 }
 int main()
 {
 int a1 = 10, a2 = 20;
 double d1 = 10.0, d2 = 20.0;
 Add(a1, a2);
 Add(d1, d2);
 /*
该语句不能通过编译,因为在编译期间,当编译器看到该实例化时,需要推演其实参类型
通过实参a1将T推演为int,通过实参d1将T推演为double类型,但模板参数列表中只有
一个T,
编译器无法确定此处到底该将T确定为int 或者 double类型而报错
Add(a1, d1);
 */
// 此时有两种处理方式:1. 用户自己来强制转化 2. 使用显式实例化
Add(a, (int)d);
 return 0;
 }

2.显式实例化

int main(void)
 {
 int a = 10;
 double b = 20.0;
 // 显式实例化
Add<int>(a, b);
 return 0;
 }

类模板

类模板的定义格式

template<class T1, class T2, ..., class Tn> 
class 类模板名
{
 // 类内成员定义
}; 
#include<iostream>
 using namespace std;
 // 类模版
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;
 };
 // 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误,具体原因后面会讲
template<class T>
 void Stack<T>::Push(const T& data)
 {
    // 扩容
    _array[_size] = data;
    ++_size;
 }
 int main()
 {
    Stack<int> st1;    // int
    Stack<double> st2; // double
    return 0;
 }

类模板的实例化

// Stack是类名,Stack<int>才是类型
Stack<int> st1;    // int
Stack<double> st2; // double

结语

💖💖💖非常感谢各位的支持💖💖💖
我们共同进步
本系列持续更新,关注我,带你了解更多C++知识
下期再见
玉桂狗yay

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿梦Anmory

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值