博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C++深度剖析教程39】实现C++数组类模板
阅读量:1999 次
发布时间:2019-04-28

本文共 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

转载地址:http://nbytf.baihongyu.com/

你可能感兴趣的文章
让ffmpeg支持rmvb
查看>>
ffmpeg支持的所有格式
查看>>
ffmepg对avs的支持
查看>>
ubuntu 查看硬件信息
查看>>
curl使用
查看>>
linux块设备5
查看>>
linux time和timer
查看>>
android logcat使用
查看>>
linux块设备6
查看>>
c++ map
查看>>
c/c++ const修饰符
查看>>
linux块设备7
查看>>
c++多态
查看>>
c陷阱与缺陷
查看>>
Android深入浅出之Binder机制
查看>>
在Android中使用OpenCv
查看>>
uml学习
查看>>
computer vision
查看>>
linux查看硬件信息
查看>>
linux支持大于4G内存
查看>>