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

هل يحدث تقطيع الكائنات عند استخدام "المتجه" في لغة C++؟

تم النشر بتاريخ 2024-11-12
تصفح:998

Does Object Slicing Occur When Using a `vector` in C  ?

المتجهات وتعدد الأشكال في لغة C: تقطيع الكائنات

خذ بعين الاعتبار رمز C التالي:

class Instruction {
public:
    virtual void execute() { }
};

class Add: public Instruction {
private:
    int a;
    int b;
    int c;
public:
    Add(int x, int y, int z) {a=x;b=y;c=z;}
    void execute() { a = b   c;  }
};

في فئة منفصلة:

void some_method() {
    vector v;
    Instruction* i = new Add(1,2,3)
    v.push_back(*i);
}

وفي فئة أخرى:

void some_other_method() {
    Instruction ins = v.back();
    ins.execute();
}

تشترك هذه الفئات في ناقل التعليمات. ومع ذلك، فإننا نواجه قلقًا بشأن وظيفة التنفيذ. هل سيحتفظ بنوع الإضافة الخاص به؟

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

لحل هذه المشكلة، فكر في استخدام Vector أو، بشكل أكثر فعالية، Vector >.

أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3