PDA

View Full Version : سوال: سوال در زمینه سربارگذاری عملگرها



samanta3000
پنج شنبه 13 مهر 1391, 19:12 عصر
سلام به همه دوستان عزیز
من یه سوال در مورد یکی از کدهای سربارگذاری داشتم که البته توی خیلی موارد دیده می شود
این کد سربارگذاری عملگر جمع برای جمع مختصات دو نقطه است


class loc{
int x,y;
public:
loc(){x=0;y=0;}
loc(int i,intj){x=i;y=j;}
void get_xy(int &i,int &j){i=x;j=y;}
loc operator +(loc op2);
};

loc loc::operator+(loc op2)
{
loc temp;
temp.x = op2.x +x;
temp.y = op2.y +y;
return temp;
}

main()
{
loc o1(10,10),o2(5,3),03
int x,y;
o3=o1+o2;
o3.get_xy(x,y)
cout<<o3
return 0;
;}





چرا توی این کد از شی tempاستفاده کرده است؟ در صورتیکه می توانست از this استفاده کند؟ اما در این حالت این شی مقدار صفر دارد و در صورت جمع شدن با مقدار op2 همان op2 می شود!! نه مجموع op2 و op1

این شی همان عملوند اول(عملوند سمت چپ) عملگر است که تابع را فراخوانده یا نه؟
اگر همان عملوند اولی است چطور مقدار آن به temp داده شده است؟

مسعود اقدسی فام
پنج شنبه 13 مهر 1391, 20:15 عصر
اگه کلمه کلیدی this استفاده بشه مقدار op1 به مقدار شی فراخواننده (مثلا op1) اضافه می‌شه (یعنی op1 هم تغییر می‌کنه). و بعد مقدار جدید بازگشت داده می‌شه. مثلا اگه op3 = op1 + op2 باشه، مقدار op1 و op3 هر دو برابر مجموع op1 و op2 می‌شن.

samanta3000
جمعه 14 مهر 1391, 09:19 صبح
ممنون از جوابتون
ببخشید انگار منظورمو درست مطرح نکردم
اما منظورم این بود که اگر temp را op3 در نظر بگیریم و op2 هم مقدار عملوند دوم باشد(همان آرگومان)
پس مقدار عملوند اولی یعنی op1 کجاست تا با مقدار op2 جمع شود و در temp ریخته شود؟

temp.x= x + op2.x
یعنی x همان op1.x است؟ اگر بله ، چطور مقدار op1.x را به خود اختصاص داده؟
ببخشید اگه سوالم خیلی مبتدییه!!!!!

rubiks.kde
جمعه 14 مهر 1391, 10:51 صبح
درسته جوابتون در واقع temp.x=x + op2.x همون temp.x=this.x + op2.x است

دلیل این هم اینه که زمانی شما از op3 = op1 + op2 استفاده میکنی در واقع (طبق تعریف در برنامه نویسی شیگرا) + یک پیام به op1 است تا op2 رو بگیره و بر اساس عملیات مربوط به + با اون رفتار کنه (با شی فراخوانی کننده جمع کنه) خوب حالا چون + توسط op1 فراخوانی میشه دیگه لازم نیست از op1.x استفاده کنی بلکه میتونی از x یا this.x استفاده کنی

مسعود اقدسی فام
جمعه 14 مهر 1391, 11:58 صبح
ممنون از جوابتون
ببخشید انگار منظورمو درست مطرح نکردم
اما منظورم این بود که اگر temp را op3 در نظر بگیریم و op2 هم مقدار عملوند دوم باشد(همان آرگومان)
پس مقدار عملوند اولی یعنی op1 کجاست تا با مقدار op2 جمع شود و در temp ریخته شود؟

temp.x= x + op2.x
یعنی x همان op1.x است؟ اگر بله ، چطور مقدار op1.x را به خود اختصاص داده؟
ببخشید اگه سوالم خیلی مبتدییه!!!!!

به زبان ساده x و y که بدون اسم شی نوشته شدن همون x و y شی op1 هستن که می‌شد نوشت this->x و this->y

اتفاقا برای خوانایی بیشتر من خودم همیشه this رو اول استفاده از متغیرها و توابع می‌نویسم که وقتی بعدا کد رو می‌خونم سردرگم نشم. این دو قسمت عبارتی که پشت سر هم می‌نویسم هیچ فرقی با هم ندارن. فقط دومی خواناتره.




temp.x = op2.x +x;
temp.y = op2.y +y

temp.x = op2.x +this->x;
temp.y = op2.y +this->y

مسعود اقدسی فام
جمعه 14 مهر 1391, 17:14 عصر
من یه لحظه حواسم به زبان #C رفته بود. اصولا this->x نوشته می‌شه نه this.x