Гетерогенные списки, виртуальные функции и данные-члены

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;
}

Внутри main():

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;
}

Я ищу подходящий способ доступа к данным-членам производного класса внутри функции производного класса при вызове через указатель родительского класса из основного.Любая помощь приветствуется!

Это было полезно?

Решение

Во время выполнения virtual Теперь вы знаете, что тип объекта соответствует типу класса, в котором определена функция, или производному от него классу.То есть в вашем B::func1() функция, которую ты знаешь this указывает на B объект.Объект может иметь тип, производный отB но у вас все еще есть все, что есть в B.

С другой стороны, вы не знать статически, что list[0] указывает на B объект.Код, который вы раскомментировали в своем коде, не работает.Прокомментированный код выглядит нормально

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top