|
گرانبار کردن عملگر های >> و <<
|
++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
قرار می دهد. هنگامی که کامپايلر دستور زير را می بيند:
تابع
operator>>
به صورت زير توليد می شود:
هنگامی که تابع فوق توليد شد، آرگومان ارجاعی
input
نام مستعار
cin
و آرگومان ارجاعی
num
نام مستعاری برای
phone
در نظر گرفته می شوند. بدين ترتيب سه رشته دريافت شده از ورودی در
اعضای
areacode
،
exchange
و
line
قرار می گيرند.
تابع عملگر
operator<<
يک آرگومان از نوع
ostream
با نام
output
و آرگومان ديگری از نوع کلاس
phoneNumber
با نام
num
در يافت می کند و خروجی تابع از نوع
ostream
می باشد. اين تابع شماره تلفن هايی به صورت
800 555 1212
را که شيئی از نوع کلاس
phoneNumber
می باشد، نمايش می دهد. هنگامی که کامپايلر دستور زير را می بيند:
تابع
operator<<
به صورت زير توليد می شود:
هنگامی که تابع فوق توليد شد، آرگومان ارجاعی
output
نام مستعار
cout
و آرگومان ارجاعی
num
نام مستعاری برای
phone
در نظر گرفته می شوند. بدين ترتيب سه رشته موجود در اعضای
areacode
،
exchange
و
line
به شيوه مورد نظر نمايش می يابند.
|