ما هو هذا ++ C تقنية لإضافة أنواع إلى فئة تسمى؟
-
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 ++ وظائف الأعضاء. الفرق الأساسي غير أن جميع المؤشرات إلى غير ثابت وظائف الاعضاء تحتاج خفية حجة: وهذا مؤشر إلى مثيل لفئة. دائما نأخذ في العقل: هذان النوعان من وظيفة مؤشرات غير متوافقة مع بعضها البعض.
اقتباس فقرة>