zoukankan      html  css  js  c++  java
  • 第58课 类模板的概念和意义

    思考:

    在C++中能否将泛型的思想应用到类呢?

    类模板:

    类模板的应用:

    实验:

     1 #include <iostream>
     2 #include <string>
     3 
     4 using namespace std;
     5 
     6 template < typename T >
     7 class Operator
     8 {
     9 public:
    10     T add(T a, T b)
    11     {
    12         return a + b;
    13     }
    14     T minus(T a, T b)
    15     {
    16         return a - b;
    17     }
    18     T multiply(T a, T b)
    19     {
    20         return a * b;
    21     }
    22     T divide(T a, T b)
    23     {
    24         return a / b;
    25     }
    26 };
    27 
    28 string operator-(string& l, string& r)
    29 {
    30     return "Minus";
    31 }
    32 
    33 int main()
    34 {
    35     Operator<int> op1;
    36     
    37     cout << op1.add(1, 2) << endl;
    38     
    39     Operator<string> op2;
    40     
    41     cout << op2.add("D.T.", "Software") << endl;
    42     cout << op2.minus("D.T", "Software") << endl;
    43     
    44     return 0;
    45 }

    运行结果如下:

    编译器编译到16行发现两个string类型相减,而string类本身不支持这种相减操作,于是编译器去找string类型减法的重载,于是找到了28行的函数,最终编译成功,执行时也调用到了28行的重载函数。

    类模板的工程应用:

    这三条是工程的惯用规则。

    示例:

    Operator.h

     1 #ifndef _OPERATOR_H_
     2 #define _OPERATOR_H_
     3 
     4 template < typename T >
     5 class Operator
     6 {
     7 public:
     8     T add(T a, T b);
     9     T minus(T a, T b);
    10     T multiply(T a, T b);
    11     T divide(T a, T b);
    12 };
    13 
    14 template < typename T >
    15 T Operator<T>::add(T a, T b)
    16 {
    17     return a + b;
    18 }
    19 
    20 
    21 template < typename T >
    22 T Operator<T>::minus(T a, T b)
    23 {
    24     return a - b;
    25 }
    26 
    27 
    28 template < typename T >
    29 T Operator<T>::multiply(T a, T b)
    30 {
    31     return a * b;
    32 }
    33 
    34 
    35 template < typename T >
    36 T Operator<T>::divide(T a, T b)
    37 {
    38     return a / b;
    39 }
    40 
    41 #endif

    main.c

     1 #include <iostream>
     2 #include <string>
     3 #include "Operator.h"
     4 
     5 using namespace std;
     6 
     7 
     8 int main()
     9 {
    10     Operator<int> op1;
    11     
    12     cout << op1.add(1, 2) << endl;
    13     cout << op1.multiply(4, 5) << endl;
    14     cout << op1.minus(5, 6) << endl;
    15     cout << op1.divide(10, 5) << endl;
    16     
    17     return 0;
    18 }

    放到类模板外部定义成员函数时,依然要加上template这一行。

    运行结果:

     

    小结:

  • 相关阅读:
    vue element-ui配置第三方图标库
    HTTP协议:状态码
    HTTP协议:无状态
    CDN:基础知识
    【转载】浅析机器视觉中的照明系统(该如何打光)
    nginx 端口转发
    Gitlab 备份 | 恢复 | 卸载 | 迁移 | 版本升级
    微信小程序支付服务端.net core实现,简单直接
    生产级gitlab备份
    背锅之旅:前任对我的爱-只备份不删除导致的磁盘爆满
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9589158.html
Copyright © 2011-2022 走看看