الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

المؤشر This ما هي استخداماته؟

بدأه ame5r في 8 أكتوبر 2009 · 2 رد · 1,818 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه ،،

انا لي فتره انهيت تعلم البرمجه غرضية التوجه في السي بلس بلس والحمد لله فهمت كل شيء

تقريبالكن ما لم يدخل عقلي حتى الان هو المؤشر This ارجو ان تجيبوا من فضلكم على هذه

التساؤلات التي لطالما حيرتني:

ما هي استخدامات المؤشر This بشكل عام؟وما هي استخداماته مع المعامل دوت ( . )

والسهم ->؟ وما هي استخدامات السهم بشكل عام ايضاً؟؟

والشكر الجزيل........

If Games Are Fun.....So Making Games Making Fun

#2

السلام عليكم ...

اقتباس
ما هي استخدامات المؤشر This بشكل عام؟وما هي استخداماته مع المعامل دوت ( . )

والسهم ->؟ وما هي استخدامات السهم بشكل عام ايضاً؟؟

المؤشر this هو مؤشر خاص يشير إلى النسخة التي يتم تنفيذ الدالة الحالية member function على كائن معين. فمثلاً في هذا الكود:

class myclass
{
public:
	void any_function(int var);
	...
};

int main()
{
	myclass object;
	object.any_function(5);
}

لو ركزنا على هذا السطر:

object.any_function(5);

لوجدنا أنه يتكون من أمرين, الأمر الأول هو object و الأمر الثاني هو الدالة any_function. هذه الدالة يتم تطبيقها على الكائن المسمى object, و هو بكل بساطة متغير عادي مثله مثل الأعداد الصحيحة, أي عبارة عن منطقة في الذاكرة يتم تخزين المتغيرات المكونة له. جميع الكائنات المنشأة من النوع myclass تتشارك في استخدام نفس الدوال. بالتالي ليس هناك نسخة جديدة لكل كائن, و لهذا الدالة عامة, يقوم المترجم بتمرير الكائن المطلوب لتنفيذها عليه. مايتم تمريره هو المؤشر this لا أكثر. بمعنى أنه في الحقيقة هذا هو شكل الدالة الحقيقي بالتفصيل الذي لايطلع عليه المبرمج و إنما يقوم به المترجم:

void any_function(myclass this,int var); // this مؤشر مخفي

و عندما يتم تنفيذ الدالة على كائن معين يتم تمرير عنوانه الذي يعرفه المترجم, كما في حالة object:

object.any_function(object_address, 5);

هذا بالنسبة لماهو! بالنسبة لفائدته, فهو أداة تساعدنا في إنجاز بعض المهام الصعبة في البرمجة الكائنية من دونه. أحد الاستخدامات البسيطة له, على سبيل المثال, تصور أنك لديك كائن يمثل المستطيل. بالطبع المستطيل له طول و عرض, و نريد إدخال ذلك الطول و العرض عن طريق دالة للكائن مستطيل:

class rectangle
{
public:
	void setLengthAndWidth(int length, int width)
	{
		this->length = length;
		this->width  = width;
	}
private:
	int length, width;
};

كما ترى الدالة تستقبل متغيرين لهما نفس الاسم الموجود لمتغيرين في الـ class نفسه. بالتالي, مصمم اللغة قرر أنه عندما نذكر اسم المتغير الموجود في مكانين, يتم استخدام الأقرب, و هم في هذه الحالة المتغيرين الداخلين إلى الدالة, و ليس length و width الموجودان في الـ class نفسه. بالطبع لكي نستطيع تعديل متغيرات الـ class نفسه, لابد من طريقة للوصول إليهما. و هذا الشيء هو عن طريق مؤشر الكائن نفسه this. بمعنى آخر, كأننا نقول, في الكائن الذي يتم تنفيذ الدالة عليه, قم بتعديل المتغيرات الخاصة بالكائن المشار إليه بـ this.

إذا استطعت الوصول إلى هنا, فهذا ليس نهاية المطاف, هناك استخدامات متقدمة جداً له. إذا أدرت يمكننا توسيع الموضوع و لكن أخبرنا بما وصلت إليه حتى الآن :)

تحياتي...

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 9 أكتوبر 2009 في 01:10

#3

وعليكم السلام.....

شكراً لك اخي لقد أفدتني كثيراً وفهمت النقاط التي شرحتها.....يمكننا التوسيع :lol:

لكن عندي سؤال:ماذا لو اردنا استعمال المتغيرات الخاصه بالكلاس ومن ثم المتغيرات الاخرى الخاصه بالداله نفسها, حينها يتم التعامل مع المتغيران

اللذان يرافقهما المؤشر This اليس كذلك؟كيف يمكننا حل هذه المشكله؟؟؟

وشكراً مجدداً...

تم تعديل هذه المشاركة بواسطة ame5r في 9 أكتوبر 2009 في 06:42

If Games Are Fun.....So Making Games Making Fun

مواضيع مشابهة