我写了这么一坨东西,想试一下让数组越界时有提示
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
template <class _T>
class arra
{
private:
int size;_T*a;
class iterator
{
private:
arra *arr;int i;
public:
iterator(arra *_arr,int _i):arr(_arr),i(_i){}
operator _T(){if(i<0||i>=arr->size){cout<<"越界";return arr->a[0];}return arr->a[i];}
_T operator+(_T x){return arr->a[i]+x;}
_T operator-(_T x){return arr->a[i]-x;}
_T operator*(_T x){return arr->a[i]*x;}
_T operator/(_T x){return arr->a[i]/x;}
void operator=(_T x){arr->a[i]=x;}
bool operator>(_T x){return arr->a[i]>x;}
bool operator<=(_T x){return arr->a[i]<=x;}
bool operator>=(_T x){return arr->a[i]>=x;}
};
public:
arra(int n):size(n),a(new _T[n]){for(int i=0;i<n;i++)a[i]=0;}
iterator operator[](int n){return iterator(this,n);}
};
int main()
{
arra <int> a(4);
a[1]=3;
int tmp=a[1];
a[3]=a[1];
cout<<tmp<<' <<a[3]<<'\n';
}
加减乘除都能用,但是赋值会炸。
a[3]=a[1]就会赋值失败,要a[3]=int(a[1])或者a[3]=tmp才行。
是等号重载错了还是类型转化错了吗