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这一行。

    运行结果:

     

    小结:

  • 相关阅读:
    最搞笑的“求婚”誓言
    Flex Application 初始化顺序
    LRCParser组件
    C 游戏所要看的书
    Flex3 加载进度在IE没法显示,在FF中正常
    外企面试官们爱提的十个问题
    EBS R12.1安装中文补丁包BUG:FAILED: file XLIFFLoader.class on worker [X]
    Oracle ebs 就业市场
    Oracle EBS开发基础知识
    Oracle EBS R12 运行adadmin 安装中文语言包过程中意外中断后的处理
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9589158.html
Copyright © 2011-2022 走看看