C++ 实验五

一、实验目的


模板使类和函数可在编译时定义所需处理和返回的数据类型,一个模板并非一个实实在在的类或函数,仅仅是一个类和函数的描述。由于模板可以实现逻辑相同、数据类型不同的程序代码复制,所以使用模板机制可以减轻编程和维护的工作量和难度。模板一般分为模板函数和类模板。以所处理的数据类型的说明作为参数的类就叫类模板,或者模板类,而以所处理的数据类型的说明作为参数的函数,则称为函数模板。

本实验通过编写一些简单的程序,使学生掌握泛型编程,并能够基本运用模板的语法,培养理论联系实际的和自主学习的能力,提高程序设计水平。

 


二、实验内容


(一)


编写模板函数,它将一个包含5T类型元素的数组作为参数,并返回数组的最小值。在一个程序中使用该函数,将T替换为一个包含5int值的数组和一个包含5double值的数组,以测试该函数。   

 

(二)


定义一个模板类(BinaryOperation),包含构造函数BinaryOperationT x,T y)以及方法addsubmuldivoperator(char op),通过调用operator,判断传入的op变量的值,,如果是‘+’,则进行加法,并输出结果,其他方法类似。

例:BinaryOperation bo = new BinaryOperation1,1);

    bo.operator’+’);会输出结果2

    bo.operator’-’);会输出结果0


(一)

#include<iostream>
using namespace std;

template<typename T,int size> //模版声明,T类型参数, size数组大小
T min(T (&a)[size])
{
    T min=a[0];
    for(int i=1;i<size;i++)//找最小值
    {
        if(a[i]<min)
            min=a[i];
    }
    return min;
}

int main()
{
    double a[5]={1.2,2.3,-0.2,1.9,4.5};
    int b[5]={1,2,3,4,5};
    int c[4]={0,1,2,3};
    cout<<min(a)<<endl;
    cout<<min(b)<<endl;
    cout<<min(c)<<endl;
    return 0;
}

(二)

#include<iostream>
using namespace std;

template<class T1,class T2>
class BinaryOperation
{
public:
    BinaryOperation(){}
    BinaryOperation(T1 x,T2 y){
        this->x=x;
        this->y=y;
    }
    void Operator(char op){
        if(op=='+')
            add(x,y);
        else if(op=='-')
            sub(x,y);
        else if(op=='*')
            mul(x,y);
        else if(op=='/')
            div(x,y);
    }
    T1 getx(){return x;}           //得到x值
    T2 gety(){return y;}           //得到y值
    void setx(T1 x){this->x=x;}    //设置x值
    void sety(T2 y){this->y=y;}    //设置y值
private:
    T1 x;
    T2 y;
    void add(T1 x,T2 y){
        cout<<x+y<<endl;
    }
    void sub(T1 x,T2 y){
        cout<<x-y<<endl;
    }
    void mul(T1 x,T2 y){
        cout<<x*y<<endl;
    }
    void div(T1 x,T2 y){
        if(y==0)
            cout<<"error!"<<endl;//分子不能为0
        else
            cout<<(double)x/(double)y<<endl;
}
};

int main()
{
    BinaryOperation <int,int> bo1(1,4);
    cout<<bo1.getx()<<" + "<<bo1.gety()<<" = ";
    bo1.Operator('+');
    cout<<bo1.getx()<<" - "<<bo1.gety()<<" = ";
    bo1.Operator('-');
    cout<<bo1.getx()<<" * "<<bo1.gety()<<" = ";
    bo1.Operator('*');
    cout<<bo1.getx()<<" / "<<bo1.gety()<<" = ";
    bo1.Operator('/');
    cout<<endl;

    BinaryOperation <double,double> bo2(1.2,2.3);
    cout<<bo2.getx()<<" + "<<bo2.gety()<<" = ";
    bo2.Operator('+');
    cout<<bo2.getx()<<" - "<<bo2.gety()<<" = ";
    bo2.Operator('-');
    cout<<bo2.getx()<<" * "<<bo2.gety()<<" = ";
    bo2.Operator('*');
    cout<<bo2.getx()<<" / "<<bo2.gety()<<" = ";
    bo2.Operator('/');
    cout<<endl;

    BinaryOperation <double,int> bo3(0.3,0);
    cout<<bo3.getx()<<" + "<<bo3.gety()<<" = ";
    bo3.Operator('+');
    cout<<bo3.getx()<<" - "<<bo3.gety()<<" = ";
    bo3.Operator('-');
    cout<<bo3.getx()<<" * "<<bo3.gety()<<" = ";
    bo3.Operator('*');
    cout<<bo3.getx()<<" / "<<bo3.gety()<<" = ";
    bo3.Operator('/');
    cout<<endl;

    BinaryOperation <int,double> bo4(3,5.5);
    cout<<bo4.getx()<<" + "<<bo4.gety()<<" = ";
    bo4.Operator('+');
    cout<<bo4.getx()<<" - "<<bo4.gety()<<" = ";
    bo4.Operator('-');
    cout<<bo4.getx()<<" * "<<bo4.gety()<<" = ";
    bo4.Operator('*');
    cout<<bo4.getx()<<" / "<<bo4.gety()<<" = ";
    bo4.Operator('/');
    cout<<endl;

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值