• C++之模板


    1,函数模板

    #include "stdafx.h"
    #include <iostream>

    template <typename T>//加法函数模板
    T Add(T x,T y)//二元
    {
    std::cout<<"调用模板函数:";
    return x+y;
    }

    template <typename T>//重载加法函数模板
    T Add(T x,T y,T z)//三元
    {
    std::cout<<"调用重载模板函数:";
    return x+y+z;
    }


    int main_19()
    {
    double x1=10.10,y1=10.10;
    std::cout<<Add(x1,y1)<<std::endl;//调用模板函数
    //相当于调用函数double Add(double,double)
    std::cout<<Add(x1,y1,y1)<<std::endl;//调用重载模板函数
    //相当于调用函数double Add(double,double,double)

    return0;
    }

    2,类模板

    #include "stdafx.h"
    #include <iostream>
    #include <string>

    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<int> op(10,10);
    op.determineOp('+');
    op.determineOp('-');
    op.determineOp('*');
    op.determineOp('/');

    return0;
    }

  • 相关阅读:
    【LCA】BZOJ1832 & BZOJ1787(AHOI)-集会
    【线段树+离散化】POJ2528-Mayor's posters
    JavaScript Array 整理
    常见的原生javascript DOM操作
    javascript中执行环境和作用域(js高程)
    javascript作用域链
    javascript执行环境及作用域
    [转]深入javascript——原型链和继承
    [转]深入javascript——构造函数和原型对象
    Java接口中的成员变量为什么必须声明为public static final?
  • 原文地址:https://www.cnblogs.com/linyawen/p/2288142.html
Copyright © 2020-2023  润新知