"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية استدعاء مؤشر وظيفة العضو بشكل صحيح في C ++؟

كيفية استدعاء مؤشر وظيفة العضو بشكل صحيح في C ++؟

نشر في 2025-03-23
تصفح:149

How to Correctly Invoke a Member Function Pointer in C  ?

دعوة مؤشر وظيفة العضو: تشريح بناء الجملة المناسب

عند العمل مع مؤشرات دالة الأعضاء ، من الأهمية بمكان أن يلتزم بتجنيد الصحيح لضمان التنفيذ الناجح. دعنا نتعرف على مشكلة نموذجية تمت مواجهتها عند محاولة استدعاء وظيفة عضو من خلال مؤشر وظيفة العضو وتوفير الحل اللازم.

مقتطف الكود الخاطئ:

عام: void walk () { printf ("القط يسير \ n") ؛ } } ؛ int main () { القط بيغات. void (cat ::*pcat) () ؛ PCAT = & Cat :: Walk ؛ bigcat.*pCat () ؛ }
class cat {
public:
   void walk() {
      printf("cat is walking \n");
   }
};

int main(){
   cat bigCat;
   void (cat::*pcat)();
   pcat = &cat::walk;
   bigCat.*pcat();
}
خطأ في التجميع: The Bigcat.*pCat () ؛ يولد العبارة خطأ. تملي أسبقية المشغل أن عوامل Unary لها الأسبقية على المشغلين الثنائيين. وبالتالي ، يتعين على الأقواس تحديد أولويات استدعاء الوظيفة () على عملية الربط المؤشر إلى الأعضاء.*.

(BigCat.*PCAT) () ؛ ^ ^ ^

يضمن استدعاء الوظيفة ضمن الأقواس يضمن تنفيذها أولاً ، يليه ربط مؤشر عمل العضو.

تذكر:

المشغلات.
class cat {
public:
   void walk() {
      printf("cat is walking \n");
   }
};

int main(){
   cat bigCat;
   void (cat::*pcat)();
   pcat = &cat::walk;
   bigCat.*pcat();
}
يمكن استخدام الأقواس للتحكم في أسبقية المشغل وضمان ترتيب التنفيذ الصحيح.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3