By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,218 Members | 1,701 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,218 IT Pros & Developers. It's quick & easy.

Problem about overload operator ++

P: n/a
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<intsmart_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 ?

#include <iostream>
using namespace std;
template<typename T>
class Ptr_to_T
{
public:
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;
}
Ptr_to_T& operator++(int){//postfix
cout << "Entering Operator++" << endl;
T* temp = _p;
_p += 1;
return *this;
}
T& operator*(){
cout << "Entering Operator*" << endl;
return *_p;
}
private:
T* _p;
T* _array;
int _size;
};
int main()
{
int array[10];
Ptr_to_T<intsmart_ptr(&array[0], array, 10);
*smart_ptr++ = 10;
cout << array[0] << endl;
cout << array[1] << endl;
}
Result:

Entering Operator++
Entering Operator*
4246640
10

Oct 5 '08 #1
Share this Question
Share on Google+
5 Replies


P: n/a
Hill wrote:
Ptr_to_T& operator++(int){//postfix
cout << "Entering Operator++" << endl;
T* temp = _p;
_p += 1;
return *this;
}
Here you want to return a copy of the object before the increment, but
you are returning the object after the increment. temp does not serve
any purpose.

--
Ian Collins.
Oct 5 '08 #2

P: n/a
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<intsmart_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 ?

#include <iostream>
using namespace std;
template<typename T>
class Ptr_to_T
{
public:
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;
}
Ptr_to_T& operator++(int){//postfix
cout << "Entering Operator++" << endl;
T* temp = _p;
_p += 1;
return *this;
Did you mean:

Ptr_to_T temp ( _p, _array, _size );
_p += 1;
return temp;

}
T& operator*(){
cout << "Entering Operator*" << endl;
return *_p;
}
private:
T* _p;
T* _array;
int _size;
};
int main()
{
int array[10];
Ptr_to_T<intsmart_ptr(&array[0], array, 10);
*smart_ptr++ = 10;
cout << array[0] << endl;
cout << array[1] << endl;
}
Result:

Entering Operator++
Entering Operator*
4246640
10
Oct 5 '08 #3

P: n/a
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<intsmart_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
Oct 5 '08 #4

P: n/a
On 10月5日, 下午3时37分, Obnoxious User <O...@127.0..0.1wrote:
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<intsmart_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;
};
Oct 6 '08 #5

P: n/a
ba*********@gmail.com wrote:
On 10?5?, ??3?37?, Obnoxious User <O...@127.0.0.1wrote:
>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<intsmart_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);
Huh?

Why is the returned value different from the old value? I would have
expected

return Ptr_to_T( temp, _array, _size );

}
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);
Same here.

}
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;
};

Best

Kai-Uwe Bux
Oct 6 '08 #6

This discussion thread is closed

Replies have been disabled for this discussion.