• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

اورلودكردن توابع

sasan_66

کاربر تازه وارد
تاریخ عضویت
18 جولای 2006
نوشته‌ها
450
لایک‌ها
0
سلام
كد زير رو در نظر بگيريد :
کد:
class Array {

public :

   int &operator[]( int );              
   const int &operator[]( int ) const;  
   
private:

   int size; 
   int *ptr;

};

int &Array::operator[]( int subscript )
{
    if ( subscript < 0 || subscript >= size ) {
      cout << "\nError: Subscript " << subscript 
           << " out of range" << endl;
      exit( 1 );  
   } 
   return ptr[ subscript ]; 
} 

const int &Array::operator[]( int subscript ) const
{
   if ( subscript < 0 || subscript >= size ) {
      cout << "\nError: Subscript " << subscript 
           << " out of range" << endl;
      exit( 1 );  
   } 
   return ptr[ subscript ]; 

}
اگه يه object به نام integer (non-const)از كلاس Array وجود داشته باشه عبارت روبرو باعث فراخواني كدوم تابع ميشه؟ تابع ثابت يا غير ثابت؟
cout << integer[ 5 ];
 

Mehdi.T

کاربر فعال برنامه نویسی
کاربر فعال
تاریخ عضویت
30 سپتامبر 2005
نوشته‌ها
506
لایک‌ها
3
محل سکونت
In Search of Sunrise
اگر obj رو اینطوری تعریف کنید :
کد:
const Array obj;
از over مدل const استفاده می کنه
در غیر این صورت از حالت معمولی استفاده میشه
 

sasan_66

کاربر تازه وارد
تاریخ عضویت
18 جولای 2006
نوشته‌ها
450
لایک‌ها
0
نميشه گفت چون در عبارت cout << integer[ 5 ] نيازي نيست كه integer[ 5 ] يه lvalue باشه پس تابع اوردلود سابسكريپت ثابت فراخواني ميشه؟
 
بالا