C++中类模板的概念和意义

论坛 期权论坛 期权     
java那些事   2019-7-20 20:03   3400   0


1、在 C++ 中是否能够将泛型的思想应用于类?


1、函数模板是将泛型编程的思想应用于函数,就有了函数模板;

2、可以,常用的 C++ 标准库就是 C++ 中的标准模板库,C++ 中的 STL 就是将泛型的思想应用于一系列的函数,就得到了函数模板,当然也有很多的类模板;
3、类模板就是将泛型思想应用于 C++ 中的类而得到的新概念;

2、类模板:

1、一些类主要用于存储和组织数据元素;
  • 类模板就是为了数据结构而诞生的;
2、类中数据组织的方式和数据元素的 具体类型无关;
3、如:数组类、链表类、Stack 类、Queue 类等;
  • C++ 中将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需实现的功能;

3、C++ 中的类模板:

1、以相同的方式处理不同的类型;
2、在类声明前使用 template 进行标识;
3、< typename T > 用于说明类中使用的泛指类型 T;

代码示例:

1 template < typename T >
2 class Operator  // class 表明将泛型编程应用于类
3 {
4 public:
5     T op(T a, T b)  // T 在使用类模板定义具体对象的时候关心,其它时候不关心;
6 };
4、类模板的应用:

  • 只能显示指定具体类型,无法自动推导;

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

代码示例:

1 Operator op1;
2 Operator op2;
3  int i = op1.op(1, 20);
4 string s = op2.op("D.T.", "Software");            
4、类模板:

1、声明的泛指类型 T 可以出现在类模板的任意地方;
2、编译器对类模板的处理方式和函数模板相同;
  • 从类模板通过具体类型产生不同的类;
    编译器将类模板当做一个模子,这个模子可以产生许多实实在在的类;
  • 在声明的地方对类模板代码本身进行编译;
  • 在使用的地方对参数替换后的代码进行编译;

5、类模板初探编程实验:

#include
#include

using namespace std;

template < typename T >
class Operator  // 要是用这个类模板有一个前提条件,即当前的 Operator 类模板要操作的数据类型必须支持 +、-、*、/ 这四个运算符,这四个运算符如果要运用于自己定义的数据类型类,要重载这四个运算符;第一次编译是对类模板本身的语法进行编译;
{

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 "Minus";  // 仅仅为了说明问题;
}

int main()
{
    Operator op1;

    cout
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:15
帖子:3
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP