القوائم غير المتجانسة، والوظائف الافتراضية، وبيانات الأعضاء

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

سؤال

أواجه بعض المشاكل في معرفة كيفية تعيين قيم لبيانات الأعضاء عند استدعاء وظيفة افتراضية من خلال قائمة غير متجانسة.

إليك مثال على ما أحاول القيام به:

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 هدف.الكود الذي قمت بإلغاء التعليق عليه في الكود الخاص بك لا يعمل.الرمز الذي تم التعليق عليه يبدو جيدًا

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