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

    原文:https://www.cnblogs.com/wanmeishenghuo/p/9496044.html

    内容参考: 狄泰软件学院相关教程

    数据结构课程的特点:

      专注于数据元素之间的关系

      专注于特定结构之上的算法

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

    既然数据结构只关心数据元素之间的关系,我们只需要抽象的考虑数据元素之间的关系以及算法,不用关心具体的数据类型,因此,支持泛型编程的语言最适合数据结构的学习。因此,我们重点关注C++中的模板编程。

    不考虑数据类型的编程方式:

     C++中的函数模板:

    template<typename T>是C++中特有的声明函数模板的方式。

    函数模板的语法规则:

    有了template <typename T>的声明,编译器就知道T是一个类型,就会把它当做一个类型处理。

    函数模板的使用:

    自动类型推导调用

    具体类型显式调用

      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 argc, char *argv[])
    {
        int a = 2;
        int b = 1;
    
        Swap(a, b);
    
        cout << "a = " << a << " " << "b = " << b << endl;
    
        double c = 0.01;
        double d = 0.02;
    
        Swap<double>(c, d);
    
        cout << "c = " << c << " " << "d = " << d << endl;
        return 0;
    }

    运行结果如下:

    使用模板我们不必指明具体类型,因此,学习数据结构时,我们完全可以用一个模板描述一个具体的算法。调用的时候再指定处理元素的具体类型。

    C++中的类模板:

    类模板的应用:

      只能显式指定具体类型,无法自动推导。

      使用具体类型<Type>定义对象。

      Operator<int> op1;

      Operator<double> op2;

      int i = op1.op(1, 2);

      double d  = op2.op(0.01, 0.02);

    类模板示例程序如下:

    #include <iostream>

    using namespace std;


    template <typename T>
    class Op
    {
    public:
    T process(T v)
    {
    return v * v;
    }
    };

    int main(int argc, char *argv[])
    {
    Op<int> opInt;
    Op<double> opDouble;

    cout << "5 * 5 = " << opInt.process(5) << endl;
    cout << "0.3 * 0.3 = " << opDouble.process(0.3) << endl;

    return 0;
    }

    执行结果如下:

    小结:

      模板是泛型编程理论在C++中的实现

      函数模板支持参数的自动推导和显式指定

      类模板在使用时只能显式指定类型

      类模板非常适用于编写数据结构相关的代码

  • 相关阅读:
    JDBC 连接 MySQL 数据库
    通过java类的反射机制获取类的属性类型
    反射机制实例化类,并获取类中的属性、方法、和构造器
    java8u162反射机制的一个BUG
    Java反射关于getDeclaredMethods()和getMethods()的区别
    Java反射
    30天C#基础巩固------了解委托,string练习
    30天C#基础巩固------读写流(StreamWrite/StreamReader)
    30天C#基础巩固------集合,File(文件操作 ),Encoding处理字符集
    30天C#基础巩固------面向鸭子编程,关于string和File的练习
  • 原文地址:https://www.cnblogs.com/lh03061238/p/12634234.html
Copyright © 2011-2022 走看看