C++实验3 模板


一、实验内容

1.模板函数(compare)
一般模板函数、特化模板函数

2.模板类Queue
模板类(Queue)、成员模板函数
模板特化:模板函数特化、模板成员函数特化、模板类特化

3.模板类AutoPtr
构造函数、析构函数、拷贝构造函数、等号、->、*等运算符重载
主函数调用AutoPtr

二、实验过程和相关代码

1、模板函数(compare)

1.1、一般模板函数

模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。
下面举例一个一般模板函数,比较大小。T可以是int型,double型等等。

template <class T>
int compare(const T &left, const T &right)
{
   
    cout <<"in template<class T>..." <<endl;
    return (left - right);
}

1.2、特化模板函数

但是上述泛化,明显不能用于char类型,char的比较大小不能直接用相减的方式,于是特化

template < >
int compare(const char* left, const char* right)
{
   
    std::cout <<"in special template< >..." <<std::endl;

    return strcmp(left, right);
}

1.3、模板函数实验

#include <iostream>
#include <cstring>

using namespace std;
//函数模板
template<class T>
bool IsEqual(T t1,T t2){
   
    return t1==t2;
}

template<> //函数模板特化
bool IsEqual(char *t1,char *t2){
   
    return strcmp(t1,t2)==0;
}

int main(int argc, char* argv[])
{
   
    char str1[]="ab";
    char str2[]="abc";
    char str3[]="ab";
    cout<<"函数模板:"<<endl;
    cout<<IsEqual(1,1)<<endl;
    cout<<"函数模板特化:"<<endl;
    cout<<IsEqual(str1,str2)<<endl;
    cout<<IsEqual(str1,str3)<<endl;
    return 0;
}

实验结果截图:
在这里插入图片描述
int型的1和1返回结果当然是1,而特化后的可以看出两串字符串比较后字母完全相同返回1,有不相同的则返回0。

2、模板类Queue

在这里插入图片描述

2.1、模板类 Queue

类模板格式:
在这里插入图片描述
声明了类模板就可以用类模板的形参名声明类中的成员变量和成员函数,即可以在类中使用内置类型的地方都可以使用模板形参名来声明。比如

template<class T> class Queue
{
   
	public: 
	T a; 
	T b; 
	T temp(T c, T &d);
};

在类Queue中声明了两个类型为T的成员变量a和b,还声明了一个返回类型为T带两个参数类型为T的函数temp。
在类模板外部定义成员函数的方法为:
在这里插入图片描述
比如有两个模板形参T1,T2的类A中含有一个void h()函数,则定义该函数的语法为:

    template<class T1,class T2> void A<T1,T2>::h(){
   }

代码:

template<class Type> class Queue{
   
public:
    Queue():head(0),tail(0)
    {
   

    }
    Queue(const Queue& q):head(0),tail(0)
    {
   
        copy_items(q);//拷贝函数
    }

    template<class It>
    Queue(It beg, It end):head(0),tail(0)
    {
   
        copy_items(beg,end);
    }

    template<class It>
    void assign(It beg, It end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值