zoukankan      html  css  js  c++  java
  • 泛型编程简介

    数据结构课程的特点
    -专注于数据元素之间的关系
    -专注于特定结构之上的算法

    数据结构课程并不关注数据元素的具体类型。

    泛型编程的概念
    -不考虑具体数据类型的编程方式
    对于Swap函数可以考虑下面的泛型写法

    void Swap(T& a, T& b)
    {
        T t = a;
        a = b;
        b = t;
    }

    Swap泛型写法中的T不是一个具体的数据类型,而是泛指任意的数据类型

    C++中的函数模板
    -一种特殊的函数可用于不同类型进行调用
    -看起来和普通函数很相似,区别是类型可被参数化

    template<typename T>
    void Swap(T& a, T& b)
    {
        T t = a;
        a = b;
        b = t;
    }

    函数模板的语法规则
    -template关键字用于声明开始进行泛型编程
    -typename关键字用于声明泛指类型

    函数模板的使用
    -自动类型推导调用
    -具体类型显示调用

    int a = 0;
    int b = 1;
    Swap(a,b)    //自动推导
    
    float c = 2;
    float d = 3;
    Swap<float>(c,d)  //显示调用
    #include <iostream>
    
    using namespace std;
    
    template <typename T>
    void Swap(T& a, T& b)
    {
        T t = a;
        a = b;
        b = t;
    }
    
    int main()
    {
        int a = 2;
        int b = 1;
    
        Swap(a, b);
    
        cout << "a = " << a << endl;
        cout << "b = " << b << endl;
    
        double c = 0.01;
        double d = 0.02;
    
        Swap<double>(c, d);
    
        cout << "c = " << c << endl;
        cout << "d = " << d << endl;
        return 0;
    }

    C++中的类模板
    -以相同的方式处理不同的类型
    -在类声明前使用template进行标识
    -<typename T> 用于说明类中使用的泛指类型T

    template <typename T>
    class Operator
    {
    public:
        T op(T a, T b);
    };

    类模板的应用
    -只能显示指定具体类型,无法自动推导
    -使用具体类型<Type>定义对象

    Operator<int> op1;
    Operator<double> op2;
    int i = op1.op(1, 2);
    double d = op2.op(0.01, 0.02);

    小结:

    模板是泛型编程理论在C++中的实现
    函数模板支持参数的自动推导和显示指定
    类模板在使用时只能显示指定类
    类模板非常适用于编写数据结构相关的代码

  • 相关阅读:
    正则获取HTML代码中img的src地址
    System.Diagnostics.Process 启动进程资源或调用外部的命令的使用
    按位取反运算符~
    Nhibernate Query By Criteria 条件查询
    Unit Test测试框架中的测试的执行顺序
    Jquery自定义插件之$.extend()、$.fn和$.fn.extend()
    如何采集QQ群中所有成员QQ号码
    Sql server使用Merge关键字做插入或更新操作
    c#类库和可移值类库的区别
    VS代码管理插件AnkhSvn
  • 原文地址:https://www.cnblogs.com/-glb/p/12031720.html
Copyright © 2011-2022 走看看