C++作业里的若干有关问题求解答思路

C++作业里的若干问题求解答思路
//1、写一个Array类,用来封装一个数组,支持[],<<,>>,size(),当下标越界时抛出一个自定义类型outofrange类型的异常。
//outofrange类从exception继承,构造函数接受两个整数参数:越界的下标和最大可用下标,覆盖what函数返回类似“指定下标XXX无效,
//不在0到YYY之间”的字符串。
这是我们学校老师给留的一道题 说自己写一个 Array的类 模拟 数组的功能。题上写了要求。
我说下我的 思路。 首先 我需要一个Array的类  之后 里面有个 int n ;
这个n是 接受 我创建 数组时候 定义下标 的    
比如   Array a[]=new Array(n)//n为你的 要申请数组长度。那么它的构造函数应该是
Array{
int n;
public:
int size(int n){
  return n;
}
Array(int n):n(n){}//问题就卡在这了。老师说要支持[],<<,>> 我当时想或许用到operator运算符重载
但是 我只做过 + 和 - 其它的 还没试过  所以请教 大神 帮我理出一个比较清晰的思路 顺便给我讲下 operator 到底是怎么用的  有点蒙。这题 的 思路 也给我 理一下   有伪代码就 太感激了。
};

------解决方案--------------------

#include <iostream>
#include <string>
#include <fstream>
#include<string>
using namespace std;
//1、写一个Array类,用来封装一个数组,支持[],<<,>>,size(),当下标越界时抛出一个自定义类型outofrange类型的异常。
//outofrange类从exception继承,构造函数接受两个整数参数:越界的下标和最大可用下标,覆盖what函数返回类似“指定下标XXX无效,
//不在0到YYY之间”的字符串。
class outofrange:public exception
{
public:
int iaa,iba;
outofrange(){}
outofrange(int ia,int ib)
{
        iaa = ia;
iba = ib;
if(ia >= ib)
{
throw outofrange();
}
}
string what()
{
return "指定下标XXX无效,不在0到YYY之间\n";
}
};

template <class T>
class Array
{
private:
int ichushihua;
T *ip;
public:
Array(int is)
{
this->ichushihua = is;
ip = new T[is];
}
T& operator<<( int is)
{
outofrange expt(is,ichushihua);
return *(ip+is);
}
T& operator>>( int is)
{
outofrange expt(is,ichushihua);
return *(ip+is);
}
T& operator[](int is)
{
outofrange expt(is,ichushihua);
return *(ip+is);
}
int size()
{
return this->ichushihua;
}
};

void main()
{
Array<float> suzu(5);
try
{
suzu[3] = 222.67;
cout<<suzu[3];
      cout<<"下标数量"<<suzu.size();
}
catch (outofrange e)
{
cout<<e.what();
}
}

你们老师题目出的不错。    用到很多知识点。