1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【C++深度剖析教程39】实现C++数组类模板

【C++深度剖析教程39】实现C++数组类模板

时间:2022-03-16 07:30:22

相关推荐

【C++深度剖析教程39】实现C++数组类模板

上一篇文章在那个学习了多参数类模板与特化的分析:点击链接查看上一篇文章:类模板深度剖析

本篇文章学习记录:

数值型模板参数实现C++数组类模板

1、模板中的数值型参数

模板参数可以是数值型参数。也就是非类型参数。如下图所示:

我们可以像上面定义一个局部数组,但是却不能这样定义:

int n=10;func<double,n>();

上面这种写法就是错的!!!

实际上,不光是类型参数不能为数值型模板参数,下面几种情况也不能作为模板参数

浮点数不能作为模板参数变量不能作为模板参数(上面的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<T>& obj);bool construct();public:static HeapArray<T>* 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<T>& self();~HeapArray();};template< typename T >HeapArray<T>::HeapArray(int len){m_length = len;}template< typename T >bool HeapArray<T>::construct(){m_pointer = new T[m_length];return m_pointer != NULL;}template< typename T >HeapArray<T>* HeapArray<T>::NewInstance(int length) {HeapArray<T>* ret = new HeapArray<T>(length);if( !(ret && ret->construct()) ) {delete ret;ret = 0;}return ret;}template< typename T >int HeapArray<T>::length(){return m_length;}template< typename T >bool HeapArray<T>::get(int index, T& value){bool ret = (0 <= index) && (index < length());if( ret ){value = m_pointer[index];}return ret;}template< typename T >bool HeapArray<T>::set(int index, T value){bool ret = (0 <= index) && (index < length());if( ret ){m_pointer[index] = value;}return ret;}template< typename T >T& HeapArray<T>::operator [] (int index){return m_pointer[index];}template< typename T >T HeapArray<T>::operator [] (int index) const{return m_pointer[index];}template< typename T >HeapArray<T>& HeapArray<T>::self(){return *this;}template< typename T >HeapArray<T>::~HeapArray(){delete[]m_pointer;}#endif

main.cpp

#include <iostream>#include <string>#include "Array.h"#include "HeapArray.h"using namespace std;int main(){HeapArray<char>* pai = HeapArray<char>::NewInstance(10);if( pai != NULL ){HeapArray<char>& ai = pai->self();for(int i=0; i<ai.length(); i++){ai[i] = i + 'a';}for(int i=0; i<ai.length(); i++){cout << ai[i] << endl;}}delete pai;return 0;}

在linux系统上对上述程序进行编译并运行得出结果如下图:

很明显,我们的数组类模板实现的很成功。

本文参考狄泰软件学院相关课程

想学习的可以加狄泰软件学院群,

群聊号码:199546072

学习探讨加个人(可以免费帮忙下载CSDN资源):

qq:1126137994

微信:liu1126137994

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。