ما هو هذا ++ C تقنية لإضافة أنواع إلى فئة تسمى؟

StackOverflow https://stackoverflow.com/questions/1643197

  •  10-07-2019
  •  | 
  •  

سؤال

ولقد وجدت فقط بعض التعليمات البرمجية C ++ (في http://msdn.microsoft.com/en-us/library/k8336763(VS.71).aspx )، والذي يستخدم تقنية رأيت لم يسبق له مثيل لإضافة أنواع إلى الدرجة الحالية:

class Testpm {
public:
   void m_func1() { cout << "m_func1\n"; }
   int m_num;
};

// Define derived types pmfn and pmd.
// These types are pointers to members m_func1() and m_num, respectively.
void (Testpm::*pmfn)() = &Testpm::m_func1;
int Testpm::*pmd = &Testpm::m_num;

int main() {
   Testpm ATestpm;
   Testpm *pTestpm = new Testpm;

   // Access the member function
   (ATestpm.*pmfn)();
   (pTestpm->*pmfn)();   // Parentheses required since * binds

   // Access the member data
   ATestpm.*pmd = 1;
   pTestpm->*pmd = 2;

   cout  << ATestpm.*pmd << endl
         << pTestpm->*pmd << endl;
}

ويمكن للشخص من فضلك قل لي ما يسمى هذا الأسلوب لتحديد أنواع المشتقة منها، أو يشير لي أن بعض الوثائق على ذلك؟ جئت أبدا عبرها في 13 سنوات من استخدام C ++، وترغب في إنهاء جهلي.

هل كانت مفيدة؟

المحلول

والتعليق غير صحيح: pmfn وPMD ليست "أنواع تستمد" على الإطلاق (وهم ليسوا حتى أنواع!). وهي مؤشرات لأعضاء .

نصائح أخرى

وأنا لا أعتقد أنهم "إضافة أنواع" إلى الفئة. يبدو أنها مجرد تحديد أنواع مؤشرات إلى وظائف الأعضاء والبيانات عضوا في الطبقة، ومن ثم استخدام تلك للوصول إلى عضو وظيفة الأعضاء والبيانات. على غرار كيف كنت يعلن أنواع إلى وظائف غير الأعضاء، ولكن يجري أفراد الطبقة يختلف بناء الجملة.

هنا

<اقتباس فقرة>   

وفيما يتعلق في بناء الجملة، وهناك نوعان من   أنواع مختلفة من المؤشرات الدالة:   من جهة هناك مؤشرات إلى   وظائف C عادية أو ثابت C ++   وظائف الأعضاء. من ناحية أخرى   هناك مؤشرات إلى غير ثابت C ++   وظائف الأعضاء. الفرق الأساسي   غير أن جميع المؤشرات إلى غير ثابت   وظائف الاعضاء تحتاج خفية   حجة: وهذا مؤشر إلى   مثيل لفئة. دائما نأخذ في   العقل: هذان النوعان من وظيفة   مؤشرات غير متوافقة مع بعضها   البعض.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top