c++ - عندما يكون مشغل dereference(*) محملاً بشكل زائد ، هل يتأثر استخدام*هذا؟




pointers operator-overloading (2)

إذا كان الأمر *this ينتهي الأمر بإلغاء تحديد this إلى سلسلة أحرف بدلاً من Person ، فهل هناك حل بديل يحافظ على استخدام * كمشغل dereference خارج الصف؟

لا. *this سيكون *this Person& أو Person const& يعتمد على الوظيفة. ينطبق الحمل الزائد على كائنات Person وليس المؤشرات على كائنات Person . this مؤشر إلى كائن Person .

إذا كنت تستخدم:

 Person p;
 auto v = *p;

ثم ، يتم استدعاء الزائد operator* .

لاستدعاء operator* الزائد باستخدام this ، سيكون عليك استخدام this->operator*() أو **this .

فمثلا،

class Person{
        string name;
    public:
        T& operator*(){
            return name;
        }
        bool operator==(const Person &rhs){
            return this->name == rhs.name;
        }
        bool operator!=(const Person &rhs){
            return !(*this == rhs); // Will *this be the string name or the Person?
        }
}

إذا كان الأمر *this ينتهي الأمر بإلغاء تحديد this إلى string بدلاً من Person ، فهل هناك حل بديل يحافظ على استخدام * كمشغل dereference خارج الصف؟

سيكون عائقًا تمامًا إذا لم أتمكن من زيادة الحمل * دون التخلي عن استخدام *this .


تحتاج إلى كائن من الفئة بدلاً من كائن المؤشر إلى الفئة لاستدعاء عامل التشغيل overloaded * .

Person *ptr = new Person;
Person p1 = *ptr;   // does not invoke * operator but returns the object pointed by ptr
string str = *p1 // invokes the overloaded operator as it is called on an object.

نفس الشيء مع this المؤشر. لاستدعاء * operator باستخدام this المؤشر ، سيكون عليك إجراء عملية dereference مرتين:

std::string str = *(*this);




dereference