日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

数组模板类的创建

發(fā)布時(shí)間:2025/4/5 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数组模板类的创建 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • 1 數(shù)組模板類的創(chuàng)建
      • 1.1 創(chuàng)建數(shù)組類

1 數(shù)組模板類的創(chuàng)建

1.1 創(chuàng)建數(shù)組類

開發(fā)一個(gè)數(shù)組類解決原生數(shù)組的安全性問題:

  • 提供函數(shù)獲取數(shù)組長度。
  • 提供函數(shù)獲取數(shù)組元素。
  • 提供函數(shù)設(shè)置數(shù)組元素。

棧版本:

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++深度解析教程
  • 總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。