C++模板

C++模板

一、什么是模板?

我将通过一个交换函数的例子帮助你们理解,什么是模板?

void Swap(int& left, int& right)
 {
 int temp = left;
 left = right;
 right = temp;
 }
 void Swap(double& left, double& right)
 {
 double temp = left;
 left = right;
 right = temp;
 }
 void Swap(char& left, char& right)
 {
 char temp = left;
 left = right;
 right = temp;
 }

没有模板之前,如果我们要实现两个相同变量的交换,就得写以上代码,你不觉得有点重复或者冗余吗?这时候编写C++语法的祖师爷想能不能有一个通用的模板来解决这类的问题呢?慢慢的模板便开始出现了。

二、C++模板的分类

C++中的模板分为函数模板和类模板。

1、函数模板
1.1 概念

函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。

1.2模板格式

template<typename T1, typename T2,…,typename Tn>
返回值类型 函数名(参数列表){}

1.3 举例

这就是通用的交换两个相同变量的模板了

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

注意:typename是用来定义模板参数关键字,也可以使用class(切记:不能使用struct代替class)

2、类模板
1.1 格式

template<class T1, class T2, …, class Tn>
class 类模板名
{
// 类内成员定义
};

1.2举例
#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;
};

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;
    }

// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值