سلام دوستان
من راجع به این اشاره گر که مربوط به کلاسها هم هست مطلب زیاد خوندم اما هنوز درک کاملا درستی ندارم ازش!!
ممکنه که به صورت واضح توضیح بدین که دقیقا چی هست و چه کاربردی داره؟!
Printable View
سلام دوستان
من راجع به این اشاره گر که مربوط به کلاسها هم هست مطلب زیاد خوندم اما هنوز درک کاملا درستی ندارم ازش!!
ممکنه که به صورت واضح توضیح بدین که دقیقا چی هست و چه کاربردی داره؟!
1سمپل ساده :
تویه کد 2 تا ایکس هست. اونی که اشاره گر this پشتش هست، میشه اون ایکسی که برا کلاس هست.کد:
public class EXmp
{
private int x;
public EXmp(int x){
this.x=x;
}
public void showX(){
System.out.println(x);
}
}
ویرایش: جناب pd در حین نوشتن این پست جواب داده اند و بنده پس از ارسال این پست جواب ایشونو دیدم.
سلام.نقل قول:
سلام دوستان
من راجع به این اشاره گر که مربوط به کلاسها هم هست مطلب زیاد خوندم اما هنوز درک کاملا درستی ندارم ازش!!
ممکنه که به صورت واضح توضیح بدین که دقیقا چی هست و چه کاربردی داره؟!
بطور واضح و مختصر واژه this یک اشارگر به شی جاری میباشد.
فرض کنید شما کلاس هایی به شکل زیر دارید:
تابع :کد:class MyClass; // forward declaration
class MyClassContiner{
public:
void AddToList( MyClass *obj);
}
class MyClass{
public:
void AddToContiner();
private:
MyClassContiner continer;
}
وظیفه دارد تا شی جاری از کلاس رو در continer ذخیره کند. دقیقا در چنین نقطه ایی اشارگر this به کار میاید!کد:void AddToContiner();
تابع AddToContiner توسط اشارگر this میفهمد که دقیقا از کدام شی MyClass فراخانی شده است. در حقیقت اشارگر this در تابع AddToContiner برابر است با شی MyClass ـی که از آن فراخانی شده.
تغریف تابع AddToContiner به شکل زیر میباشد:
----------------کد:void MyClass::AddToContiner(){
continer.AddToList(this);
}
به این مثال توجه کنید:
دقیقا زمانی که اجرا به تابع AddToContiner میرسد مقدار ها به شکل زیر میباشند:کد:int main(){
MyClass cls1;
MyClass cls2;
cls1.AddToContiner(); // this = cls1
cls2.AddToContiner(); // this = cls2
}
------کد:// in cls1.AddToContiner();
void MyClass::AddToContiner(){
continer.AddToList(this); // this = cls1
}
// in cls2.AddToContiner();
void MyClass::AddToContiner(){
continer.AddToList(this); // this = cls2
}
نکته دیگری که وجود دارد این است که اشارگر this در توابع static کاربرد ندارند. یعنی توابع static در اصل مستقل از شی فراخانی میشوند و فقط یک نمونه از توابع static بین تمام اشیاء یک کلاس به اشتراک گذاشته میشود. پس بنابر این استفاده از this در توابع static کاربرد ندارد و احتمالان با خطا مواجه میشود.