杂志社网站建设意义,郑州网络推广网站,淘宝客建网站,wordpress搭建电影网站加qq1126137994 微信#xff1a;liu1126137994 一起学习更多技术#xff01;#xff01;#xff01;
1、类模板
一些类主要用于存储和组织数据元素类中数据的组织方式和数据元素的具体类型无关如 数组类#xff0c;链表类#xff0c;stack类#xff0c;queue类等
C中…加qq1126137994 微信liu1126137994 一起学习更多技术
1、类模板
一些类主要用于存储和组织数据元素类中数据的组织方式和数据元素的具体类型无关如 数组类链表类stack类queue类等
C中将模板的思想应用于类使类的实现不关心具体的数据元素而只关心类所需实现的功能
C中的类模板
以相同的方式处理不同的类型在类声明前以template关键字进行标识typename T用于说明类中使用泛指类型T
2、类模板的应用
只能显示指定具体类型无法自动推导定义对象时需要使用具体类型Type定义对象 声明的泛指类型T可以出现在类模板的任意地方编译器对类模板的处理方式和函数模板相同 *从类模板通过具体类型产生不同的类 *在声明的地方对类模板进行一次编译 *在使用的地方对参数替换后的代码进行一次编译
#include iostream
#include stringusing 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 divide(T a, T b){return a / b;}
};/* 这里只是做一个演示并没有真正重载‘-’操作符 */
string operator-(string l, string r)
{return Minus;
}int main()
{Operatorint op1;cout op1.add(1, 2) endl;Operatorstring op2;cout op2.add(D.T., Software) endl;cout op2.minus(D.T, Software) endl;return 0;
}
3、类模板的工程应用
类模板必须在头文件中定义类模板的实现不能分开在不同的文件类模板外部定义的函数需要加上模板声明
下面是一个程序的头文件 Operater.h
#ifndef _OPERATOR_H_
#define _OPERATOR_H_template typename T
class Operator
{
public:T add(T a, T b);T minus(T a, T b);T multiply(T a, T b);T divide(T a, T b);
};/* 类模板外部定义的函数需要加上相应的声明OperatorT */
template typename T
T OperatorT::add(T a, T b)
{return a b;
}template typename T
T OperatorT::minus(T a, T b)
{return a - b;
}template typename T
T OperatorT::multiply(T a, T b)
{return a * b;
}template typename T
T OperatorT::divide(T a, T b)
{return a / b;
}#endif
源文件 main.c
#include iostream
#include string
#include Operator.husing namespace std;int main()
{/* 定义对象的时候需要显示指定对象的类型 */Operatorint op1;cout op1.add(1, 2) endl;cout op1.multiply(4, 5) endl;cout op1.minus(5, 6) endl;cout op1.divide(10, 5) endl;return 0;
}
4、总结
泛型编程的思想可以应用于类类模板以相同的方式处理不同的数据类型类模板非常适用于编写数据结构相关的代码类模板在使用时只能显示指定类型