سوال در مورد سربار گذاری عملگر =

p.135

New Member
سلام
کد:
myclass& myclass::operator=(const myclass& r)
{ 
 ....
   return *this;
}

در بالابخشی از برنامه که تعریف تابع برای سربار گذاری عملگر = است نوشته شده
چند تا سوال ازش داشتم ممنون می شم جواب بدید
اینکه چرا نوع بازگشتی این تابع ازنوع ارجاع است و خروجی تابع یعنی *this چه چیزی را به برنامه اصلی برمیگرداند
 

the_king

مدیرکل انجمن
سلام
کد:
myclass& myclass::operator=(const myclass& r)
{ 
 ....
   return *this;
}

در بالابخشی از برنامه که تعریف تابع برای سربار گذاری عملگر = است نوشته شده
چند تا سوال ازش داشتم ممنون می شم جواب بدید
اینکه چرا نوع بازگشتی این تابع ازنوع ارجاع است و خروجی تابع یعنی *this چه چیزی را به برنامه اصلی برمیگرداند

قضیه اینه، عملگر = فقط انتقال یک مقدار از راست به چپ و پایان نیست :
کد:
a = b;
اگر صرفا = مثل کد بالا بود، عملگر = نیازی به مقدار بازگشتی نداشت و this* هم لازم نمی شد.

عملگر = یک حلقه از یک زنجیره، ممکنه یک زنجیره از انتقال مقدار صورت بگیره :
کد:
a = b = c = d;

ممکنه کد عملگر رو طوری نوشته باشید که وقتی مقداری منتقل میشه مقدار خروجی اش یک واحد افزایش پیدا کنه،
فرضا کد زیر اجرا بشه :
کد:
a = b = c = d = 1;
و مقدار d برابر 1، مقدار c برابر 2، مقدار b برابر 3 و مقدار a برابر 4 بشه.
متغیری مثل b یا a نمی دانند که مقدار اولیه 1 بوده، هر کدوم فقط مقداری رو می بینند که دقیقا جلوشون
قرار گرفته، فرضا a مقدار b رو می بینه و b مقدار c رو می بینه.

داخل کد عملگر = باید دو اتفاق بیافته :
1) کدی نوشته بشه که مقدار پارامتر r به شیء فعلی (this) منتقل بشه. اگر صحبت از متغیر های محلی کلاس باشه،
نیازی به نوشتن عبارت this نیست، اما در کل عبارت this یعنی شیء ای که داره کد رو اجرا می کنه. this یک اشاره گر
است که مقدارش را شما مشخص نمی کنید. کامپایلر هر جایی از کد کلاس که this رو ببینه، اشاره گر اون شی ای
که کد کلاس رو اجرا می کنه قرار میده.

2) کدی نوشته بشه که مقدار شیء فعلی رو به عنوان خروجی عملگر برگردونه. مقدار شیء، نه اشاره گر شیء،
this اشاره گر شیء است، اگر بخواهید مقدار شیء رو برگردانید یک * قبل از this قرار می دهید تا اشاره گر به
مقداری که بهش اشاره می کنه تبدیل بشه. اون return هم همینکار رو انجام میده، اول مقدار this رو در کد های
قبل از اون تنظیم می کنید و حالا مقدار شیء فعلی رو بر می گردانید تا شاید زنجیره ادامه داشته باشه و
مقدار توسط متغیر دیگری دریافت بشه.
 

جدیدترین ارسال ها

بالا