bashill.zhu@gmail.com
10/6/2008 12:59:00 AM
On 10?5?, ??3?37?, Obnoxious User <O...@127.0..0.1> wrote:
> On Sat, 04 Oct 2008 18:29:54 -0700, Hill wrote:
> > This is a program just for testing operator overloading. But I found the
> > operator ++ doesn't act like on built-in types. For detail: When
> > int array[10];
> > Ptr_to_T<int> smart_ptr(&array[0], array, 10); *smart_ptr++ = 10; //
> > I want to modify array[0],but this sentence
> > modifies array[1]
>
> > Do I make myself clear?
> > Could some body tell me how to fix it ?
>
> Did you even read the replies you got the last time?
>
> --
> OU
> Remember 18th of June 2008, Democracy died that afternoon.http://frapedia..se/wiki/Information_in_English
Thanks all!
template<typename T>
class Ptr_to_T
{
public:
class Range{};
Ptr_to_T(T* p, T* array, int size):_p(p),_array(array),_size(size)
{
}
Ptr_to_T(T* p):_p(p){}
Ptr_to_T& operator++(){//prefix
_p += 1;
return *this;
}
const Ptr_to_T operator++(int){//postfix
T* temp = _p;
_p += 1;
return Ptr_to_T(temp, temp, _array + _size - temp);
}
Ptr_to_T& operator--(){//prefix
_p--;
return *this;
}
const Ptr_to_T operator--(int){//postfix
T* temp = _p;
_p -= 1;
return Ptr_to_T(temp, temp, _array + _size -temp);
}
T& operator*(){
check();
return *_p;
}
private:
void check(){
if( _p - _array >= _size || _p < _array){
cout << _p - _array << endl;
throw Range();
}
}
T* _p;
T* _array;
int _size;
};