日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数组模板类的创建

發布時間:2025/4/5 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数组模板类的创建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1 數組模板類的創建
      • 1.1 創建數組類

1 數組模板類的創建

1.1 創建數組類

開發一個數組類解決原生數組的安全性問題:

  • 提供函數獲取數組長度。
  • 提供函數獲取數組元素。
  • 提供函數設置數組元素。

棧版本:

Array.h:

#ifndef _ARRAY_H_ #define _ARRAY_H_#include <stdexcept>using namespace std;template < typename T, int N > class Array {T m_array[N]; public:int length() const;bool set(int index, T value);bool get(int index, T& value);T& operator[] (int index);T operator[] (int index) const;virtual ~Array(); };template < typename T, int N > int Array<T, N>::length() const {return N; }template < typename T, int N > bool Array<T, N>::set(int index, T value) {bool ret = (0 <= index) && (index < N);if( ret ){m_array[index] = value;}return ret; }template < typename T, int N > bool Array<T, N>::get(int index, T& value) {bool ret = (0 <= index) && (index < N);if( ret ){value = m_array[index];}return ret; }template < typename T, int N > T& Array<T, N>::operator[] (int index) {if( (0 <= index) && (index < N) ){return m_array[index];}else{throw out_of_range("T& Array<T, N>::operator[] (int index)");} }template < typename T, int N > T Array<T, N>::operator[] (int index) const {if( (0 <= index) && (index < N) ){return m_array[index];}else{throw out_of_range("T Array<T, N>::operator[] (int index) const");} }template < typename T, int N > Array<T, N>::~Array() {}#endif

main.cpp:

#include <iostream> #include <string> #include "Array.h" #include "HeapArray.h"using namespace std;int main() {Array<double, 5> ad;for(int i=0; i<ad.length(); i++){ad[i] = i * i;}for(int i=0; i<ad.length(); i++){cout << ad[i] << endl;}return 0; }

堆版本:
HeapArray.h:

#ifndef _HEAPARRAY_H_ #define _HEAPARRAY_H_#include <stdexcept>using namespace std;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() const;bool get(int index, T& value);bool set(int index ,T value);T& operator [] (int index);T operator [] (int index) const;HeapArray<T>& self();const HeapArray<T>& self() const;~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() const {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) {if( (0 <= index) && (index < length()) ){return m_pointer[index];}else{throw out_of_range("T& HeapArray<T>::operator [] (int index)");} }template < typename T > T HeapArray<T>::operator [] (int index) const {if( (0 <= index) && (index < length()) ){return m_pointer[index];}else{throw out_of_range("T HeapArray<T>::operator [] (int index) const");} }template < typename T > HeapArray<T>& HeapArray<T>::self() {return *this; }template < typename T > const HeapArray<T>& HeapArray<T>::self() const {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; }

參考資料:

  • C++深度解析教程
  • 總結

    以上是生活随笔為你收集整理的数组模板类的创建的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。