C++ 模板->模板函数

类模板:

(1)对模板参数没有限制

(2)避免代码的重复

(3)注意重载的准确的匹配

(4)模板的组合技术(下一次用STL分析)

//
#include "stdafx.h"
//#include<iostreamstd::>
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> v;

template <typename T>//加法函数模板
T Add(T x,T y)

template <typename T>//在类模板定义之前,都需要加上模板声明
class BinaryOperation//二目运算类
{
private:
        T x;
        T y;
char op;
void add()
        {
            std::cout<<x<<op<<y<<"="<<x+y<<std::endl;
        }
void sub()
        {
            std::cout<<x<<op<<y<<"="<<x-y<<std::endl;
        }
void mul();
void div();    
public:
        BinaryOperation(T x,T y):x(x),y(y)
        {
        }
void determineOp(char op);
};


//在类外定义成员函数:
//在成员函数定义之前进行模板声明,
//且在成员函数名之前加上"类名<类型参数>::"
template <typename T>
void BinaryOperation <typename T>::mul()
{
    std::cout<<x<<op<<y<<"="<<x*y<<std::endl;
}

template <typename T>
void BinaryOperation <typename T>::div()
{    

    std::cout<<x<<op<<y<<"="<<x/y<<std::endl;
}

template <typename T>
void BinaryOperation <typename T>::determineOp(char op)
{
this->op=op;
switch(op)
    {
case'+':
            add();
break;
case'-':
            sub();
break;
case'*':
            mul();
break;
case'/':
            div();
break;
default:
break;
    }
}

int main()
{

    BinaryOperation<double> op(12.5,14.6);  
    op.determineOp('+');
    op.determineOp('-');
    op.determineOp('*');
    op.determineOp('/');
    system("pause");
    return 0;
}


{
return x+y;
}

int main()
{

int x=10,y=10;
    std::cout<<Add(x,y)<<std::endl;//相当于调用函数int Add(int,int)

double x1=10.10,y1=10.10;
    std::cout<<Add(x1,y1)<<std::endl;//相当于调用函数double Add(double,double)

long x2=9999,y2=9999;
    std::cout<<Add(x2,y2)<<std::endl;//相当于调用函数long Add(long,long)

return 0;
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值