c/c++テンプレートとSTL小例シリーズの自己構築Array配列

2760 ワード

c/c++テンプレートとSTL小例シリーズの自己構築Array配列
自己構築のArray配列は、次の対外インタフェースを提供します.
方法
機能の説明
Array()
パラメータなし構築方法、構築要素の個数がテンプレートパラメータの配列
Array(int length)
パラメータ構築方法があり、構築要素の個数がパラメータlength個の配列である
~Array()
こうぞうかんすう
int size()
配列内の要素の数を返します.
T& get(int num)
配列で指定した下付き要素の参照を返します.
void set(T data, int num)
下付き要素を指定する値の設定
T& operator [] (int num)
リロードタイプTの[]関数
次のコードはプライベート要素size 1を使用しているのでsizeで名前を付けたかったのですが、int size()メソッドが公有メソッドで宣言されているのでコンパイルできないのでsize 1と名付けられているのがおかしいです.
my_array.h
ifndef __my_array__
#define __my_array__
template
class Array {
public:
  Array();
  Array(int length);
  ~Array();
  T& get(int idx);
  T& operator[](int idx);
  void set(T data, int idx);
  int size();
private:
  T* pt;
  int size1;

};
//    
template
Array::Array(){
  pt = new T[n];
  size1 = n;
}
//    
template
Array::Array(int length){
  pt = new T[length];
  size1 = length;
}
//    
template
Array::~Array(){
  delete [] pt;
}
//         
template
int Array::size(){
  return size1;
}
//         
template
T& Array::get(int num){
  if(num >= size1 || num < 0){
    //                                                        
  }
  else{
    return pt[num];
  }
}
//          
template
void Array::set(T data, int num){
  if(num >= size1 || num < 0){
    //                                                        
  }
  else{
    pt[num] = data;
  }
}
//       []  
template
T& Array::operator[](int num){
  if(num >= size1 || num < 0){
    //                                                        
  }
  else{
    return *(pt + num);
  }
}
#endif

試験手順:
#include 
#include 
#include "my_array.h"

using namespace std;

int main(){
  Array ary;
  for(int i = 0; i < ary.size(); ++i){
    ary.set(i * 10, i);
    cout << ary.get(i) << " ";
    cout << ary[i] << ", ";
  }
  cout << endl;

  Array asr(4);
  for(int i = 0; i < asr.size(); ++i){
    asr.set("AAA", i);
    cout << asr.get(i) << " ";
    cout << asr[i] << ", ";
  }
  cout << endl;
  return 0;
}

転載先:https://www.cnblogs.com/xiaoshiwang/p/9545313.html