گرانبار کردن عملگر های >> و <<

   ++C قادر به دريافت داده های تعريف شده در اين زبان و ارسال آنها به خروجی می باشد و برای اينکار از عملگر های >> و << استفاده می کند. اين عملگر ها برای انواع داده ای موجود در اين زبان گرانبار شده اند. ما نيز می توانيم اين عملگر ها را برای انواع داده و کلاسهايی که خودمان ايجاد کرده ايم، گرانبار کنيم. در برنامه زير کلاسی با نام phoneNumber که شماره تلفن را در خود نگهداری می کند ايجاد شده است. در اين برنامه توسط عملگر << يک شماره تلفن از ورودی دريافت می شود و توسط عملگر >> اين شماره در صفحه نمايش چاپ می گردد. به اين برنامه توجه کنيد:

#include <iostream.h>
 
class PhoneNumber {
  friend ostream &operator<<
        ( ostream&, const PhoneNumber & );
  friend istream &operator>>
        ( istream&, PhoneNumber & );
 
  private:
    char areaCode[ 4 ];  // 3-digit area code and null
    char exchange[ 4 ];  // 3-digit exchange and null
    char line[ 5 ];      // 4-digit line and null
};
 
ostream &operator<<
    ( ostream &output, const PhoneNumber &num )
{
  output << num.areaCode << " "
         << num.exchange << " " << num.line;
 
  return output;   // enables cout << a << b << c;
}
 
istream &operator>>
    ( istream &input, PhoneNumber &num )
{
  input >> num.areaCode;  // input area code
  input >> num.exchange;  // input exchange
  input >> num.line;      // input line
 
  return input; // enables cin >> a >> b >> c;
}
 
int main()
{
  PhoneNumber phone;
 
  cout << "Enter phone number in the form "
       << "123 456 7890:\n";
 
  cin >> phone;
 
  cout << "The phone number entered was: ";
 
  cout << phone << endl;
 
  return 0;
}

خروجی برنامه به صورت زير می باشد :

Enter phone number in the form 123 456 7890:
021 224 5348
The phone number entered was: 021 224 5348

   همانطور که در برنامه فوق می بينيد توابع عملگرهای >> و << از نوع توابع دوست تعريف شده اند. چون عملگر >> دارای يک عملوند سمت چپ از نوع ostream & می باشد مانند cout در دستور cout<<classObject و نيز عملگر << دارای يک عملوند سمت چپ از نوعistream & می باشد مانند cin در دستور cin>>classObject. همچنين اين توابع گرانبار شده بايد به اعضای داده شيئی که بايد از ورودی دريافت و در خروجی چاپ شود، دسترسی داشته باشند. به دلايل ذکر شده اين توابع از نوع توابع عملگر دوست تعريف شده اند.

   تابع عملگر operator>> يک آرگومان از نوع istream با نام input و آرگومان ديگری از نوع کلاس phoneNumber با نام num در يافت می کند و خروجی تابع از نوع istream می باشد. اين تابع شماره تلفن هايی به صورت

800 555 1212

را از ورودی دريافت کرده و آنها را در شيئی از نوع کلاس phoneNumber قرار می دهد. هنگامی که کامپايلر دستور زير را می بيند:

cin>>phone;

تابع operator>> به صورت زير توليد می شود:

operator>>(cin,phone);

   هنگامی که تابع فوق توليد شد، آرگومان ارجاعی input نام مستعار cin و آرگومان ارجاعی num نام مستعاری برای phone در نظر گرفته می شوند. بدين ترتيب سه رشته دريافت شده از ورودی در اعضای areacode ، exchange و line قرار می گيرند.

   تابع عملگر operator<< يک آرگومان از نوع ostream با نام output و آرگومان ديگری از نوع کلاس phoneNumber با نام num در يافت می کند و خروجی تابع از نوع ostream می باشد. اين تابع شماره تلفن هايی به صورت

800 555 1212

را که شيئی از نوع کلاس phoneNumber می باشد، نمايش می دهد. هنگامی که کامپايلر دستور زير را می بيند:

cout<<phone;

تابع operator<< به صورت زير توليد می شود:

operator<<(cout,phone);

   هنگامی که تابع فوق توليد شد، آرگومان ارجاعی output نام مستعار cout و آرگومان ارجاعی num نام مستعاری برای phone در نظر گرفته می شوند. بدين ترتيب سه رشته موجود در اعضای areacode ، exchange و line به شيوه مورد نظر نمايش می يابند.

 

 

 

   معرفی کامپيوتروبرنامه نويسی

   ساختارهای کنترلی

   توابع

   آرايه ها

   اشاره گر ها و رشته ها

   کلاسها

   گرانبار کردن عملگر ها

 
 
 
   
 
 

حق کپی رایت محفوظ می باشد