c/c++ 模板與STL小例子系列 自建Array數組 自建的Array數組,提供如下對外介面 | 方法 | 功能描述 | | | | | Array() | 無參數構造方法,構造元素個數為模板參數個的數組 | | Array(int length) | 有參數構造方法,構造元素個數為參數lengt ...
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的[]函數 |
下麵代碼用使用了私有元素size1,本來想用size命名,但是因為在公有方法里聲明瞭int size()方法,編譯不過去,所以起名為size1,感覺很奇怪。
my_array.h
ifndef __my_array__
#define __my_array__
template<typename T, int n>
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<typename T, int n>
Array<T, n>::Array(){
pt = new T[n];
size1 = n;
}
//構造函數
template<typename T, int n>
Array<T, n>::Array(int length){
pt = new T[length];
size1 = length;
}
//析構函數
template<typename T, int n>
Array<T, n>::~Array(){
delete [] pt;
}
//取得數組元素的個數
template<typename T, int n>
int Array<T,n>::size(){
return size1;
}
//得到指定下標的元素
template<typename T, int n>
T& Array<T, n>::get(int num){
if(num >= size1 || num < 0){
//異常
}
else{
return pt[num];
}
}
//設定指定下標元素的值
template<typename T, int n>
void Array<T, n>::set(T data, int num){
if(num >= size1 || num < 0){
//異常
}
else{
pt[num] = data;
}
}
//重載元素類型的[]函數
template<typename T, int n>
T& Array<T, n>::operator[](int num){
if(num >= size1 || num < 0){
//異常
}
else{
return *(pt + num);
}
}
#endif
測試程式:
#include <iostream>
#include <string>
#include "my_array.h"
using namespace std;
int main(){
Array<int, 5> ary;
for(int i = 0; i < ary.size(); ++i){
ary.set(i * 10, i);
cout << ary.get(i) << " ";
cout << ary[i] << ", ";
}
cout << endl;
Array<string, 3> 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;
}