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

[ تمت الإجابة ]مؤشر This في oop

بدأه طموحة بلا حدود في 5 مارس 2013 · 5 رد · 914 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم


لو سمحتوا ممكن حد يشرح لي ما عمل وما فائده استخدام  المؤشر This مع الكائنات


كما في :


class test

{

private:

int x;

public:

test ( int =0);

void print()const;

};

test::test(int a)

{

x=a;

}

void test::print()const

{

cout<<"x = "<<x<<endl;

cout<<"This -> ="<<this->x<<endl;

cout<<"*this ="<<(*this).x<<endl;

}

 


كثيــــرووون هــــــــم أولئـكــــــ الـــــــذيـــن يسعــــووون جــــــاهــــــدين مــــن أجـــــل التميـــــز ولكـــــــن!!!!

هيهــــــــات فالقمــــــــة لا تتســـــع إلا لـــــــواحد ومـــــع ذالكــــــــ فلكــــــل مجتهــــــــد نصيــــب

#2

كيف ستصلي لل fields وال methods داخل الكلاس ؟

 

للأسف إذا كتبتي x داخل اي method فهي غير معلومة ولكن المعلوم هو this->x  فهي مؤشر للكائن الحالي

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#3

في C++ يمكنك الوصول لـx دون الحاجة لـthis (على عكس بايثون).

 

#include <iostream>
class Class {
private:
    int number;
public:
    Class(void) {
        number = 1;
    }
   
    int getNumber(void) {
        return number;
    }
};
int main(int argc, char **argv)
{
    Class object;
   
    std::cout << object.getNumber() << std::endl; // سيطبع 1
   
    return 0;
}

 

this تشير للكائن نفسه كما قال أحمد، يمكنك التحقق هنا:

 

#include <iostream>
#include <cstdio>
class Class {
public:
    void myaddress(void) {
        printf("address of 'this'   = 0x%.8x\n", (unsigned int) this); // this عنوان
    };
};
int main(int argc, char **argv)
{
    Class object;
   
    object.myaddress();
    printf("address of 'object' = 0x%.8x\n", (unsigned int) &object); // object عنوان
    return 0;
}

 

عنوان this هو نفسه عنوان object:

 

address of 'this'   = 0x0022ff1f
address of 'object' = 0x0022ff1f

 

غالباً لن تحتاجين لإستخدامها الا في حالات أشهرها عند وجود تشابه في الأسماء كما في المثال هنا:

 

#include <iostream>
class Class {
private:
    int number;
public:
    Class(int number) {
        number = number; // لن تغير قيمة العنصر
    }
   
    int getNumber(void) {
        return number;
    }
};
int main(int argc, char **argv)
{
    Class object(10);
    std::cout << object.getNumber() << std::endl;
    return 0;
}

 

سيطبع (قيمة عشوائية قد تختلف عندك):

 

2147303424

 

لتمييز number الممرر عن number التابع لـClass لابد من اللجوء لـthis:

 

#include <iostream>
class Class {
private:
    int number;
public:
    Class(int number) {
        this->number = number; // الصواب
    }
   
    int getNumber(void) {
        return number;
    }
};
int main(int argc, char **argv)
{
    Class object(10);
    std::cout << object.getNumber() << std::endl; // سيطبع 10
    return 0;
}
2
#4
اقتباس

في C++ يمكنك الوصول لـx دون الحاجة لـthis (على عكس بايثون).

 

آها عذرا، شكرا جزيلا لتوضيحك 

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#5

الشكر للإخوة على الإجابات وأضيف

 

قد يقول أحدهم يمكن تغيير الأسماء في حال التشابه ولا حاجة لاستخدام this

 

ولكن كلما أتيحت الحرية في التسميات يمكن جعل الأسماء أكثر واقعية

 

فمثلا عندما تضع نقطة أمام متحول الصنف جيد أن تظهر الخاصية باسم Count  بدلا من Count1 أو _Count  أو count

 

ونفس الأمر لو فتحت قوس أما الميثود أن يظهر في التول تيب أسماء البارمتر Count  بدلا من mCount  أو prmCount

 

وفيما يخص الإشارة لنفسه نحتاجه بكثرة عند إسناد الأوبجكت داخل نفسه إلى متحول أو نمرره عبر بارمتر إلى دالة أخرى

 

فعلى سبيل المثال قد يتضمن الكائن متغيرات من كائنات أخرى فكيف تعرف الأبناء من أبوها أو من الكائن المالك لها

إن ذلك يكون من خلال متغير ضمن الأبناء باسم Parent  أو Owner  أو Container  و يكون من فئة الأب وأثناء إنشاء الأب لأبنائه يمرر لها نفسه من خلال this

تم تعديل هذه المشاركة بواسطة أبو أحمد المبرمج في 6 مارس 2013 في 00:18

1

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#6

تسسسسسسسسسلم أخي Mr.B

وجزاك الله الف الف خير

شرح اكثر من رائع

كثيــــرووون هــــــــم أولئـكــــــ الـــــــذيـــن يسعــــووون جــــــاهــــــدين مــــن أجـــــل التميـــــز ولكـــــــن!!!!

هيهــــــــات فالقمــــــــة لا تتســـــع إلا لـــــــواحد ومـــــع ذالكــــــــ فلكــــــل مجتهــــــــد نصيــــب

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