PDA

View Full Version : سوال: سوال در مورد اورلودینگ برای کلاس ارایه



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

UfnCod3r
شنبه 18 خرداد 1392, 13:15 عصر
این

const int &operator[](int) const;

نوع داده ای رو ب صورت const بر می گردونه و شما نمی تونی مقدار بازگشتی رو تقییر بدی .
ولی تو اون یکی می شه تغیرر داد .

Array arr;
conat int a = arr[0]; //const int &operator[](int) const seda zade mishe
a[0] = 34; //int &operator[]( int ) seda zade mishe

D_felfelak
شنبه 18 خرداد 1392, 13:24 عصر
خب اگر همین رو به صورت
int operator[](int) const;
تعریف کنیم چه مشکلی پیش میاد یعنی به جای ارجاع ثابت برگردونه مقدارش رو برگردونه؟