C++中怎么应用类模板
发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,这篇文章主要讲解了"C++中怎么应用类模板",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C++中怎么应用类模板"吧!一、类模板的引出:1、在c++中是
千家信息网最后更新 2025年01月27日C++中怎么应用类模板
这篇文章主要讲解了"C++中怎么应用类模板",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"C++中怎么应用类模板"吧!
一、类模板的引出:
1、在c++中是否能够将泛型的思想应用在类上呢?
我们在前面的两篇文章里面,对函数模板有了一个清楚的认识,作为类比学习,当然泛型的思想是可以应用到类上的。
2、类模板:
一些类主要用于存储和组织数据元素
类中数据组织的方式和数据元素的具体类型无关
如:数组类,链表类,Stack类,Queue类等等
c++中将模板的思想应用于类,使得类的实现不关注数据元素的具体类型,而只关注类所需要实现的功能
3、C++中的模板:
以相同的方式处理不同的类型
在类声明前使用template进行标识
template < typename T >//T表示泛指类型
class Operator
{
public:
T op(T a , T b);
};
4、类模板的应用
只能显示指定具体类型,无法自动推导(我们的函数模板是可以实现自动推导具体类型的)
//使用具体类型""定义对象
Operator op1;
Operator op2;
int i = op1.op(1,2);
string s = op2.op("txp","C++");
声明的泛指类型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 divide(T a, T b)
{
return a / b;
}
};
string operator-(string& l, string& r)// 全局函数方式重载 - 操作符,编译通过;先类内部、再全局
{
return "Minus";
}
int main()
{
Operator op1;
cout << op1.add(1, 2) << endl;
Operator op2; // 第二次使用类模板时进行编译,但是并不是对所有模板中的函数进行了第二次编译,是分步编译的,首先编译的是构造函数,此时用的是默认的,没有问题,这里编译通过;
cout << op2.add("Txp", "C++") << endl;
cout << op2.minus("Txp", "C++") << endl; // 如果没有定义全局的重载 - 操作符的函数时,字符串相减没有定义,报错;这里报错展示出来是为了证明类模板编译也是经过了两次编译;这里编译器针对 minus() 函数进行第二次编译;定义全局的重载 - 操作符函数后,打印 Minus ;
return 0;
}
输出结果:
root@txp-virtual-machine:/home/txp# ./a.out
3
TxpC++
Minux
5、类模板的工程应用
类模板必须在头文件中定义
类模板不能分开实现在不同的文件中
类模板外部定义的成员函数需要加上模板<>声明
代码实践:
Operator.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);
};
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;
}
template < typename T >
T Operator::multiply(T a, T b)
{
return a * b;
}
template < typename T >
T Operator::divide(T a, T b)
{
return a / b;
}
#endif
test.cpp文件:
#include
#include
#include "Operator.h"
using namespace std;
int main()
{
Operator 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;
}
输出结果:
root@txp-virtual-machine:/home/txp# ./a.out
3
20
-1
2
感谢各位的阅读,以上就是"C++中怎么应用类模板"的内容了,经过本文的学习后,相信大家对C++中怎么应用类模板这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
模板
编译
函数
应用
类型
C++
全局
数据
文件
方式
学习
不同
代码
元素
地方
思想
操作符
实践
相同
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
权威数据库有哪种
武进教育网络安全平台网址
数据库附加出错905
宁夏网络安全入侵
mysql数据库应用实验训练3
本科网络安全毕业设计
互联网概念基金和科技基金概念
全国网络安全法制与知识竞赛
互联网金融b端金融科技价值
广州昶宏网络技术有限公司
看不见服务器
使命召唤ol 服务器延迟问题
服务器显示器怎么接线
后端数据库开发小白
2015年银行软件开发中心工资
需求分析师PK软件开发
全世界的电脑数据库
单位网络安全风险自查
安卓客户端与服务器通信
速达数据库账号密码错误
db2数据库还原
orcale数据库安装不上
吃货软件开发方案
南充手机软件开发
以多媒体和网络技术为核心的
软件开发运营岗位职责
软件开发设计师岗位职责
苹果软件开发工程师待遇
服务器为什么不能识别新硬盘
甲骨文数据库是什么类型