【C++深度剖析教程39】实现C++数组类模板
发布日期:2021-07-01 00:05:33
浏览次数:3
分类:技术文章
本文共 2600 字,大约阅读时间需要 8 分钟。
上一篇文章在那个学习了多参数类模板与特化的分析:点击链接查看上一篇文章:
本篇文章学习记录:
- 数值型模板参数
- 实现C++数组类模板
1、模板中的数值型参数
模板参数可以是数值型参数。也就是非类型参数。如下图所示:
我们可以像上面定义一个局部数组,但是却不能这样定义:
int n=10;func();
上面这种写法就是错的!!!
实际上,不光是类型参数不能为数值型模板参数,下面几种情况也不能作为模板参数
- 浮点数不能作为模板参数
- 变量不能作为模板参数(上面的int n)
- 类对象不能作为模板参数
实际上,数值型模板参数是必须在编译阶段被处理的单元,因此在编译阶段数值型模板参数必须被准确无误的确定。向上面的变量,类对象等,都是只有在运行的时候才能够被确定的,所以不能作为数值型模板的参数。
2、实现C++中的数组类模板
以下使用C++的模板技术,实现一个通用的数组类。并给出创建的实例。从而更加深刻的理解模板技术。(具体代码比较简单就不分析了,主要理解使用模板技术编写一些通用的类如何实现。)
HeapArray.h
#ifndef _HEAPARRAY_H_#define _HEAPARRAY_H_template< typename T >class HeapArray{ private: int m_length; T* m_pointer; HeapArray(int len); HeapArray(const HeapArray& obj); bool construct();public: static HeapArray * NewInstance(int length); int length(); bool get(int index, T& value); bool set(int index ,T value); T& operator [] (int index); T operator [] (int index) const; HeapArray & self(); ~HeapArray();};template< typename T >HeapArray ::HeapArray(int len){ m_length = len;}template< typename T >bool HeapArray ::construct(){ m_pointer = new T[m_length]; return m_pointer != NULL;}template< typename T >HeapArray * HeapArray ::NewInstance(int length) { HeapArray * ret = new HeapArray (length); if( !(ret && ret->construct()) ) { delete ret; ret = 0; } return ret;}template< typename T >int HeapArray ::length(){ return m_length;}template< typename T >bool HeapArray ::get(int index, T& value){ bool ret = (0 <= index) && (index < length()); if( ret ) { value = m_pointer[index]; } return ret;}template< typename T >bool HeapArray ::set(int index, T value){ bool ret = (0 <= index) && (index < length()); if( ret ) { m_pointer[index] = value; } return ret;}template< typename T >T& HeapArray ::operator [] (int index){ return m_pointer[index];}template< typename T >T HeapArray ::operator [] (int index) const{ return m_pointer[index];}template< typename T >HeapArray & HeapArray ::self(){ return *this;}template< typename T >HeapArray ::~HeapArray(){ delete[]m_pointer;}#endif
main.cpp
#include#include #include "Array.h"#include "HeapArray.h"using namespace std;int main(){ HeapArray * pai = HeapArray ::NewInstance(10); if( pai != NULL ) { HeapArray & ai = pai->self(); for(int i=0; i
在linux系统上对上述程序进行编译并运行得出结果如下图:
很明显,我们的数组类模板实现的很成功。
本文参考狄泰软件学院相关课程
想学习的可以加狄泰软件学院群, 群聊号码:199546072学习探讨加个人(可以免费帮忙下载CSDN资源):
qq:1126137994 微信:liu1126137994转载地址:https://lyy-0217.blog.csdn.net/article/details/84933639 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月14日 05时22分48秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
[13] JMeter-详解JMeter参数化之CSV Data Set Config
2019-05-01
[14] JMeter关联-详解JMeter正则表达式提取器
2019-05-01
优化jmeter脚本
2019-05-01
Gradle基础使用总结1
2019-05-01
性能测试场景设置---不同场景下对应的jmeter脚本【不定时补充】
2019-05-01
登录oracle数据库时常用的操作命令整理
2019-05-01
微信小程序实现安卓机下拉不刷新,ios下拉刷新操作(自定义底部tab栏在安卓机下拉)
2019-05-01
小程序动态获取组件高度(自定义Tabbar的高度)
2019-05-01
如何是实现微信会员开卡组件中一个手机号绑定一个微信号(思路篇)
2019-05-01
小程序实现sku商品规格
2019-05-01
has been blocked by CORS policy: Response to preflight request doesn‘t pass access control check 报错
2019-05-01
使用aspose.words 18.6实现pdf文档转换
2019-05-01
包机制介绍
2019-05-01
JavaDoc---生成自己的API文档
2019-05-01
Java数组详解
2019-05-01
Java面向对象详解
2019-05-01