سوال در مورد مبحث اورلودینگ
کلاس ارایه رو از روی دایتل مطالعه کردم تفاوت دو تا تابع زیر که برای یک عملگر اورلود شده رو متوجه نمیشم که اصلا" چه تفاوتی دارند؟ چه وقت کامپایلر این رو فراخونی میکنه ک چه وقت اون رو؟ عملکردشون ؟ و ؟
خواهشمندم کامل توضیح بدین
اگر هدر تابع کاانست رو به زیر تغییر بدیم چه مشکلی پیش میاد؟ ( منهای اینکه ارجاع کانست هزینه کپی کردن رو نداره )
int Array::operator[] (int subscript) const
توی این کد به صورت زیر هستش!
const int &Array::operator[](int subscript ) const
کد:
کد:
int &Array::operator[]( int subscript )
{
// check for subscript out-of-range error
if ( subscript < 0 || subscript >= size )
{
cerr << "\nError: Subscript " << subscript
<< " out of range" << endl;
exit( 1 ); // terminate program; subscript out of range
} // end if
return ptr[ subscript ]; // reference return
} // end function operator[]
// overloaded subscript operator for const Arrays
// const reference return creates an rvalue
int Array::operator[]( int subscript ) const
{
// check for subscript out-of-range error
if ( subscript < 0 || subscript >= size )
{
cerr << "\nError: Subscript " << subscript
<< " out of range" << endl;
exit( 1 ); // terminate program; subscript out of range
} // end if
return ptr[ subscript ]; // returns copy of this element
} // end function operator[]
کد:
class Array
{
public:
.......
// subscript operator for non-const objects returns modifiable lvalue
int &operator[]( int );
// subscript operator for const objects returns rvalue
int operator[]( int ) const;
private:
int size; // pointer-based array size
int *ptr; // pointer to first element of pointer-based array
}; // end class Array
#endif