D_felfelak
شنبه 18 خرداد 1392, 11:55 صبح
کلاس ارایه رو از روی دایتل مطالعه کردم تفاوت دو تا تابع زیر که برای یک عملگر اورلود شده رو متوجه نمیشم که اصلا" چه تفاوتی دارند؟ چه وقت کامپایلر این رو فراخونی میکنه ک چه وقت اون رو؟ عملکردشون ؟ و ؟
خواهشمندم کامل توضیح بدین
اگر هدر تابع کاانست رو به زیر تغییر بدیم چه مشکلی پیش میاد؟ ( منهای اینکه ارجاع کانست هزینه کپی کردن رو نداره )
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
const 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[][/CODE]
class Array
{
public:
.......
// subscript operator for non-const objects returns modifiable lvalue
int &operator[]( int );
// subscript operator for const objects returns rvalue
const int &operator[](int) const;
private:
int size; // pointer-based array size
int *ptr; // pointer to first element of pointer-based array
}; // end class Array
خواهشمندم کامل توضیح بدین
اگر هدر تابع کاانست رو به زیر تغییر بدیم چه مشکلی پیش میاد؟ ( منهای اینکه ارجاع کانست هزینه کپی کردن رو نداره )
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
const 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[][/CODE]
class Array
{
public:
.......
// subscript operator for non-const objects returns modifiable lvalue
int &operator[]( int );
// subscript operator for const objects returns rvalue
const int &operator[](int) const;
private:
int size; // pointer-based array size
int *ptr; // pointer to first element of pointer-based array
}; // end class Array