У меня возникли проблемы с выяснением того, как присваивать значения данным-членам при вызове виртуальной функции через гетерогенный список.
Вот пример того, что я пытаюсь сделать:
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;
}
Я ищу подходящий способ получить доступ к данным члена производного класса в функции производного класса, если вызов через указатель родительского класса из main. Любая помощь приветствуется!
Выполняя virtual
Теперь вы должны понимать, что тип объекта — это тип класса, в котором определена функция, или класс, производный от него. То есть в вашем B::func1()
функция, которую вы знаете this
указывает на B
объект. Объект может иметь тип, полученный изB
но у вас все еще есть все B
,
С другой стороны, вы не статично знать, что list[0]
указывает на B
объект. Код, который вы не комментировали в своем коде, не работает. Код с комментариями выглядит нормально
Других решений пока нет …