C++模板学习之类模板的概念和意义讲解
程序员文章站
2024-01-28 08:09:46
为什么需要模板类? 类模板怎么实现? 类模板的意义
我们接触了函数模板,那么在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