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

    1. 数据结构与泛型编程

    (1)数据结构专注于数据元素之间的关系并不关注数据元素的具体类型

    (2)数据结构专注于特定结构上的算法

    (3)泛型编程是不考虑具体数据类型的编程方式,很适合编写数据结构的相关代码。

    2. C++中的函数模板

    (1)一种特殊的函数,可用于不同类型进行调用

    (2)看起来和普通函数相似,区别是类型是可被参数化

    (3)函数模板的语法规则

      ①template关键字用于声明开始进行泛型编程

      ②typename关键字用于声明泛指类型

     

    (4)函数模板的使用

      ①自动类型推导调用

      ②具体类型显式调用

    3. C++中的类模板

    (1)以相同的方式处理不同的类型

    (2)在类声明前使用template进行标识

    (3)<typename T>用于说明类中使用的泛指类型T

    (4)类模板的应用

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

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

     

    【编程实验】初探函数模板和类模板的使用

    //main.cpp

    #include <iostream>
    
    using namespace std;
    
    //函数模板
    template <typename T>
    void Swap(T& a, T& b)
    {
        T t = a;
        a = b;
        b = t;
    }
    
    //类模板
    template <typename T>
    class Op
    {
    public:
        T process(T v)
        {
            return v * v;
        }
    };
    
    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;
    
        cout << endl;
    
        /*类模板调用示例*/
        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;
    }
    /*输出结果
    a = 1, b = 2
    c = 0.02, d = 0.01
    
    5 * 5 = 25
    0.3 * 0.3 = 0.09
    */

    4. 小结

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

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

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

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

  • 相关阅读:
    机器学习之线性回归
    最长回文字串——manacher算法
    linux系统下pdf操作软件pdftk
    markdown表格
    3.9 标准化,让运营数据落入相同的范围
    3.numpy_array数组
    4. 归并排序和快速排序
    3.病毒分裂
    2. 大整数乘法
    1.单峰序列
  • 原文地址:https://www.cnblogs.com/5iedu/p/6636597.html
Copyright © 2011-2022 走看看