欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++模板学习之类模板的概念和意义讲解

程序员文章站 2022-05-26 20:51:52
为什么需要模板类? 类模板怎么实现? 类模板的意义 我们接触了函数模板,那么在c++中是否能够将泛型的思想应用于类? 为什么需要模板类? 一些类主要用于存储和组织数据元素 类中数据组织的方式和数据元...

为什么需要模板类? 类模板怎么实现? 类模板的意义

我们接触了函数模板,那么在c++中是否能够将泛型的思想应用于类?

为什么需要模板类?

一些类主要用于存储和组织数据元素 类中数据组织的方式和数据元素的具体类型无关 如:数组类,链表类,stack类,queue类,等

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

类模板怎么实现?

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

示例代码:类模板初探

#include 
#include 

using namespace std;

template < typename t >
class 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 pide(t a, t b)
 {
  return a / b;
 }
};

string operator-(string& l, string& r)
{
 return "minus";
}

int main()
{
//operator op1;  //error
 operator op1;

 cout << op1.add(1, 2) << endl;

 operator op2;

 cout << op2.add("d.t.", "software") << endl;
 cout << op2.minus("d.t", "software") << endl;  

 return 0;
}

输出结果:

3

d.t.software

minus

分析:

1. operator op1; 与函数模板不同,只能显示指定具体类型(operator op1;),无法自动推导。

2. 声明的泛指类型t 可以出现在类模板的任意地方

3. 编译器对类模板的处理方式和函数模板相同

a) 从类模板通过具体类型产生不同的类

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

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

类模板的意义

在工程中,我们会怎么使用类模板呢?

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

应用注意事项:

类模板必须在头文件中定义 类模板不能分开实现在不同的文件中 类模板外部定义的成员函数需要加上模板<>声明

示例代码:模板的工程应用

#ifndef _operator_h_
#define _operator_h_

template < typename t >
class operator
{
public:
 t add(t a, t b);
 t minus(t a, t b);
};

template < typename t >
t operator::add(t a, t b)  //成员函数需要加上
{
 return a + b;
}

template < typename t >
t operator::minus(t a, t b)
{
 return a - b;
}
#endif