C++泛型编程

在C++中,模板主要分为两种:

(1)函数模板:

允许你定义一个通用的函数,这个函数可以处理不同的数据类型。函数模板的格式通常如下所示:
template <typename T, typename U, ...>
return_type function_name(parameter_list)

{
   
// 函数体
}
其中T和U等是类型参数,它们代表任意的数据类型。在调用函数时,编译器会根据传递的参数类型来实例化相应的函数版本。

(2)类模板:

与函数模板类似,类模板允许创建可以操作不同数据类型的类。类模板的格式大致如下:
template <typename T, typename U, ...>
class ClassName

{
   
// 类的成员和方法
};
类模板中的T、U等同样代表任意的数据类型,可以根据需要创建不同类型的类实例。

----------------------------------举个具体的列子------------------------------------

#include <iostream>
using namespace std;

//void Swap(char& left,char& right) 
//{
//    char temp = left;
//    left = right;
//    right = temp;
//}
//
//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;
//}

//模板,模板参数定义的是类型

template<typename T>

---------------------------------------------------
void Swap(T& left, T& right)
{
    T temp = left;
    left = right;
    right = temp;
}

----------------------------------------------------

template<class T1,typename T2>

class Stack 
{
public:

    Stack(T2 capacity =4)
        :_capacity(capacity)
    {
        cout<<"Stack()"<< endl;
        _array = new T1[capacity];
        _size = 0;
    }
    ~Stack()
    {
        delete[] _array;
    }

private:
    T2 _capacity;
    int _size;
    T1* _array;
};

int main()
{
    //思考一下上面的两个Swap调用的是一个函数吗?
    //显然不是的,类型都不一样建立的栈帧也不一样
    //那是怎么做的呢?
    //是编译器用模板 实例化 生成对应的Swap函数
    //模板的本质是本来重复的要程序员自己做的活,现在交给编译器帮我们来做了
    //有点像电脑里的npu。

    int i = 0, j = 0;
    Swap(i,j);

    double X = 1.1, Y = 1.5;
    Swap(X,Y);

    //下面写一个通用的类
    Stack<int,int>* st1=new Stack<int,int>(1);
    Stack<double,double>* st2=new Stack<double,double>(1.5);

   //这段代码可以不写 delete st1 和 delete st2。
   // 因为在栈上分配的对象会在离开作用域时自动释放内存。
   // 但是,为了良好的编程习惯和避免潜在的内存泄漏,
   // 建议在不再需要动态分配的内存时使用 delete 进行释放。

    delete st1;
    delete st2;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

foreverInDebug Hou

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

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

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

打赏作者

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

抵扣说明:

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

余额充值