PDA

View Full Version : سوال: سوالی درمورد operator overloading



hajizadeh.m
چهارشنبه 16 فروردین 1391, 19:16 عصر
سلام.من عملگر =+ رو تعریف کردم برای انجام عمل خاصی بر روی داده های کلاسم.
حال فرض کنید a , b , c سه شی از کلاس من باشند.مشگل من اینه که حاصل عبارت
(a+=b) += c
با عبارت
a += b += c یکسان نیست.و البته جواب درست رو هم عبارت دومی میده و اولی جوابی متفاوت با چیزی که من میخوام میده.
(اولی فقط a+=b رو داخل a میریزه اما دیگه c رو که جمع میکنه داخل a نمیریزه!!)
لطفا کمکم کنید که ایراد کار کجاست.
ممنون

Ananas
چهارشنبه 16 فروردین 1391, 21:53 عصر
سلام.
خوب وقتی این کارو میکنی :
(a+=b) += c
b بدون تغییر میمونه اگه میخوای با دومی یکی بشه باید بنویسی :

a += (b += c)
همین کارو من با float انجام دادم این نتیجه رو میده. با int هم امتحان کنی همینطوره.

shahmohammadi
چهارشنبه 16 فروردین 1391, 21:56 عصر
سلام.
همون طور كه مي دونيد دستور:A+=B;هنگامم كامپايل به دستور:A=A+B;تبديل ميشه.
بنابراين دستوراتي كه شما نوشتيد به دستورات زير تبديل ميشند:
(a+=b)+=c; // will be converted to blow:
(a=a+b)=(a=a+b)+c;
//
//
a += b += c;//will be converted to:
a=a+(b=b+c);
دستور آخر كه راحته و در دستور اول(خط دوم) عملگر = وسطي مقدار سمت راست رو در سمت چپ كه يك ( ) هست و متغير خاصي نيست مي گذاره. البته با كمي دقت مي شه فهميد كه خروجي اين دو دستور يكي هست ولي مقاديري كه متغير ها مي گيرند در اين دو دستور متفاوته. دو دستور return (a+=b)+=c; و return a += b += c; مقادير يكساني رو به بيرون تابع ارسال خواهند كرد. و يا دستورات چاپ printf("%d",(a+=b)+=c); و printf("%d",a += b += c); عبارت يكساني رو چاپ خواهند كرد.