PDA

View Full Version : سوال: رفع اشکال در مورد این کد



motherboard
دوشنبه 27 مرداد 1393, 21:52 عصر
سلام.مگه this اشاره گر به شی نیست.پس این this در کد زیر به چه شی ای داره اشاره می کنه؟؟؟ کد صحیح و سالمه.با فلسفه شی گرایی اشنا هستم.اما همچنان سر این this گیج میزنم.تا اونجا که من میدونم x یک شی نیست.!!! کلا بچه ها گیج زدم.

#include<iostream>
using namespace std;

/* local variable is same as a member's name */
class Test
{
private:
int x;
public:
void setX (int x)
{
// The 'this' pointer is used to retrieve the object's x
// hidden by the local variable 'x'
this->x = x;
}
void print() { cout << "x = " << x << endl; }
};

int main()
{
Test obj;
int x = 20;
obj.setX(x);
obj.print();
return 0;
}



بچه ها این this داره چی کار می کنه؟بهم توضیح بدید.اخه من فکر می کردم که this اشاره گر به فقط شی هستش.

rahnema1
دوشنبه 27 مرداد 1393, 22:06 عصر
داره به شیء جاری اشاره می کنه

کامبیز اسدزاده
دوشنبه 27 مرداد 1393, 22:13 عصر
سلام.مگه this اشاره گر به شی نیست.پس این this در کد زیر به چه شی ای داره اشاره می کنه؟؟؟ کد صحیح و سالمه.با فلسفه شی گرایی اشنا هستم.اما همچنان سر این this گیج میزنم.تا اونجا که من میدونم x یک شی نیست.!!! کلا بچه ها گیج زدم.

#include<iostream>
using namespace std;

/* local variable is same as a member's name */
class Test
{
private:
int x;
public:
void setX (int x)
{
// The 'this' pointer is used to retrieve the object's x
// hidden by the local variable 'x'
this->x = x;
}
void print() { cout << "x = " << x << endl; }
};

int main()
{
Test obj;
int x = 20;
obj.setX(x);
obj.print();
return 0;
}



بچه ها این this داره چی کار می کنه؟بهم توضیح بدید.اخه من فکر می کردم که this اشاره گر به فقط شی هستش.

خب ببین هر تابعی در C++‎‎‎‎‎‎ میتونه در درون خودش توسط اشاره گر this اعضای خودش رو صدا بزنه مثلا شما تابعی داری که دارای چندین عضو یا پارامتر هست برای صدا زدنشون میتونه از اشاره گر this استفاده کنی قبلا در مورد این توضیح داده بودم برای خود شما !!!! بازم نیافتاد اون 5 ریالی؟ :لبخند:

به اینم توجه کن که در توابع استاتیکی نمیتونی ازش به صورت مستقیم استفاده کنید.
خود Object میتونه عضوی از تابع باشه که در این حالت توسط اشاره گر this میتونی آبجکت رو صدا بزنی یا حالا هر نوع عضو دیگه.

حالا در این مثال خودت هم x به عنوان عضوی از تابع setX هستش پس میتونی در داخل تابع توسط اشاره گر this صداش بزنی.
به طور کلی یکی از مهمترین اشاره گر های C++‎‎‎‎‎‎ همین this هستش که تمامی عضو های تابع رو در اختیار میگیره تا توسط اون فراخوانی داخلی عضو های یک تابع رو انجام بدین.


به طور کلی وظیفش اشاره کردن به عوض موجود در تابع مورد نظر است.
همچنین به عضو های friend نمیتونید توسط this اشاره کنید اینم یه نکته کوچیک.

motherboard
دوشنبه 27 مرداد 1393, 22:14 عصر
داره به شیء جاری اشاره می کنه

مرسی.اما من می خوام مطلب باز تر بشه.ببین الان شی ای به نام obj ساخته شده.اون شی هم داره از public ها استفاده می کنه.اما this داره به یک پارامتری مثل x اشاره می کنه.اگه بخوام حرف شما رو اصلاح کنم باید گفت که داره به صورت غیر مستقیم به شی جاری اشاره می کنه. اخه من انتظار داشتم که this بیاد obj اشاره کنه.!!! باز نیاز هست که بحث کنیم. هنوز مطلب رو کامل نگرفتم.

motherboard
دوشنبه 27 مرداد 1393, 22:27 عصر
به طور کلی یکی از مهمترین اشاره گر های C++‎‎‎‎‎‎‎ همین this هستش که تمامی عضو های تابع رو در اختیار میگیره تا توسط اون فراخوانی داخلی عضو های یک تابع رو انجام بدین.


به طور کلی وظیفش اشاره کردن به عوض موجود در تابع مورد نظر است. .
داره مطلب دستم میاد.اما ایا میشه به جای this کد رو یک تغییر کوچک داد تا کد همون کار رو بکنه؟؟ این رو هم بگید ممنون میشم.

rahnema1
دوشنبه 27 مرداد 1393, 22:35 عصر
مرسی.اما من می خوام مطلب باز تر بشه.ببین الان شی ای به نام obj ساخته شده.اون شی هم داره از public ها استفاده می کنه.اما this داره به یک پارامتری مثل x اشاره می کنه.اگه بخوام حرف شما رو اصلاح کنم باید گفت که داره به صورت غیر مستقیم به شی جاری اشاره می کنه. اخه من انتظار داشتم که this بیاد obj اشاره کنه.!!! باز نیاز هست که بحث کنیم. هنوز مطلب رو کامل نگرفتم.

ما یک کلاس تعریف می کنیم و قراره از روی اون کلاس به تعداد دلخواه شیء ایجاد کنیم.
مثلا ما ده تا شیء ایجاد می کنیم در واقع this برای هر شیء به همون شیء اشاره می کنه
بنابراین در اینجا this داره به obj اشاره می کنه
this یعنی «خودم»

rahnema1
دوشنبه 27 مرداد 1393, 22:42 عصر
یک نکته دیگه this به x اشاره نمیکنه این علامت <- به معنای اشاره نیست. این علامت برای دسترسی به اعضای یک کلاس به کار میره. به عبارت دیگه this->x یعنی عضو x از شیء جاری ( که در اینجا شیء جاری obj هست)

ciavosh
پنج شنبه 30 مرداد 1393, 12:39 عصر
ببینید توی کلاس یک متغیر داریم به نام x. این کلاس یک سازنده داره که یک آرکومان میگیره که اون هم اسمش x هست. حالا می خواهیم آن x را که عضو کلاس هست را برابر آن x دیگر که آرگومان سازنده کلاس هست قرار بدیم. یعنی x = x.

همانگونه که ملاحظه میشود در اینجا کامپایلر و حتی خودمان نمیتوانیم تشخیص دهیم کدام x کدام است. در نتیجه مینویسیم this->x=x.

حال کاملاً مشخص است: مقدار x آرگومان در متغیر x ای که عضو همین کلاس هست قرار میگیرد.