欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c/c++ 模板与STL小例子系列<一 >自建Array数组

程序员文章站 2022-07-05 14:32:26
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;
}