• 第五十八课、类模板的概念和意义


    一、类模板概念及应用

    1、类模板

    (1)、一些类主要用于存储和组织数据

    (2)、类中数据组织的方式和数据元素的具体类型无关

    (3)、如数组类、链表类、Stack类、Queue类等

    (4)、c++将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的具体功能

    2、c++中的类模板

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

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

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

    3、类模板的应用

    (1)、只能显示指定具体类型,无法自动推导

    (2)、使用具体类型<Type>定义具体对象

    (3)、声明的泛指类型T可以出现在类模板的任意地方

    (4)、编译器对类模板的处理方式和函数模板相同

    A、从类模板通过具体类型产生不同的

    B、在声明的地方对类模板代码本身进行编译

    C、在使用的地方对参数替换后的代码进行编译

    #include<iostream>
    #include<string> using namespace std; template<typename T> class Test { public: T add(T a, T b) { return a + b; } T minus(T a, T b) { return a - b; } T multiply(T a, T b) { return a / b; } T divide(T a, T b) { return a / b; } }; //重载减法操作符来进行字符串相减 string operator - (string& l, string& r) { return l + "-" + r; } int main() { Test<int> t1;//必须指定类型,这里产生一个类,然后创建对象 二次编译,调用构造函数 cout << "1 + 2 =" << t1.add(1, 2) << endl;//1 + 2 = 3 二次编译,将add函数中的T换成int Test<string>t2; cout << "c++ - Java = " << t2.minus("c++", "Java") << endl;//c++ - Java 二次编译,若没有重载减法操作符则报错 return 0; }

    二、类模板的工程应用

    1、类模板必须在头文件中定义

    2、类模板不能分开实现在不同的文件中

    3、类模板外部定义的成员函数需要加上模板<>声明

    //Test.h

    #ifndef _TEST_H_
    #define _TEST_H_
    
    template<typename T>
    class Test
    {
    public:
        T add(T a, T b);
        T minus(T a, T b);
        T multiply(T a, T b);
        T divide(T a, T b);       
    };
    
    template<typename T>     //下面的进行泛型编程,所以这句还是要的
    T Test<T>::add(T a, T b)//外部定义的成员函数要加上模板<>声明
    {
        return a + b;
    }
    
     template<typename T>
    T Test<T>::minus(T a, T b)
    {
        return a - b;
    }
    template<typename T>
    T Test<T>::multiply(T a, T b)
    {
        return a * b;
    }
    
    template<typename T>
    T Test<T>::divide(T a, T b)
    {
        return a / b;
    }
    
    #endif

    //main.cpp

    #include<iostream>
    #include"Test.h"
    
    using namespace std;
    
    int main()
    {
        Test<int> t1;
        cout << "1 + 2 =" << t1.add(1, 2) << endl;
        
        return 0; 
    }

    三、小结

    (1)、泛型编程的思想可以应用于类

    (2)、类模板以相同的方式处理不同类型的数据

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

    (4)、类模板在使用时只能显示指定类型

  • 相关阅读:
    git刚初始化项目的操作
    git在不同平台windows、linux、mac 上换行符的问题
    HTTP请求报文和HTTP响应报文
    记一次挂马清除经历:处理一个利用thinkphp5远程代码执行漏洞挖矿的木马
    Shell 一键安装命令
    Linux下ThinkPHP网站目录权限设置
    Linux fdisk普通分区扩容
    cachecloud安装部署
    python
    【转】【Python】Python网络编程
  • 原文地址:https://www.cnblogs.com/gui-lin/p/6375184.html
Copyright © 2020-2023  润新知