القوائم غير المتجانسة، والوظائف الافتراضية، وبيانات الأعضاء
-
20-12-2019 - |
سؤال
أواجه بعض المشاكل في معرفة كيفية تعيين قيم لبيانات الأعضاء عند استدعاء وظيفة افتراضية من خلال قائمة غير متجانسة.
إليك مثال على ما أحاول القيام به:
class A
{
protected:
virtual void func1();
private:
A * list;
}
class B: public A
{
protected:
void func1();
private:
int i1, i2;
}
ضمن الرئيسي ():
list = new A[10];
list[0] = new B;
list[0]->Func1();
إعلان Func1 ():
void B::Func1()
{
int a, b;
cin >> a >> b;
list[0]->i1 = a;
list[0]->i2 = b;
// or can I just do this:
// i1 = a;
// i2 = b;
}
أنا أبحث عن الطريقة المناسبة للوصول إلى بيانات الأعضاء الخاصة بالفئة المشتقة داخل وظيفة الفئة المشتقة في حالة الاتصال عبر مؤشر الفئة الأصلية من main.أي مساعدة سيكون محل تقدير كبير!
المحلول
أثناء تنفيذ أ virtual
وظيفتك الآن أن نوع الكائن هو نوع الفئة التي تم تعريف الوظيفة فيها أو فئة مشتقة منها.وهذا هو، في الخاص بك B::func1()
وظيفة تعرفها this
يشير إلى أ B
هدف.قد يكون الكائن من نوع مشتق منB
ولكن لا يزال لديك كل شيء موجود B
.
ومن ناحية أخرى، أنت لا تعرف ذلك بشكل ثابت list[0]
نقاط ل B
هدف.الكود الذي قمت بإلغاء التعليق عليه في الكود الخاص بك لا يعمل.الرمز الذي تم التعليق عليه يبدو جيدًا