Описание вопроса объемное, но сам он скорее всего простой. Суть его такова:
Имеем класс интерфейс, базовый класс, два класса-наследника базового. В интерфейсе также имеем виртуальную ф-ю вывода информации, которая "уточняется" в классах-наследниках.
//класс интерфейс
class InterfaceClass{
public:
InterfaceClass();
~InterfaceClass();
virtual void output() = 0;
}
//базовый
class Base : public InterfaceClass{
public:
//тут нужные конструкторы
void output(); //выводим a
protected:
int a;
};
//производный
class DerivateOne : public Base{
public:
//тут конструкторы
void output(); //выводим b1 и a
protected:
int b1;
};
//производный
class DerivateTwo : public Base{
public:
//тут конструкторы
void output(); //выводим b2 и a
protected:
int b2;
}
Далее мы хотим создать массив из объектов типа DerivateOne и DerivateTwo непосредственно в main():
...
DerivateOne ArrOne[3]; //массив типа DerivateOne
DerivateTwo ArrTwo[3]; //массив типа DerivateTwo
//инициализируем элементы массива
...
И, собственно, сам вопрос. Пусть у нас есть указатель на void:
void *ptr;
Каким образом пройти по массиву, используя этот самый указатель и адресную арифметику, а именно инкремент (ptr++)?
То бишь вместо:
for (int i = 0; i < 3; i++){
ArrOne[i].output();
Писать что-то в стиле:
ptr = &ArrOne[0]
for (int i = 0; i < 3; i++){
ptr->output();
ptr++;
}
И, соответственно, после этого ptr будет указывать на элементы массива ArrTwo.
Нужно ли привести void *ptr к типу интерфейса (InterfaceClass*), а уже затем станут доступны операции вида ptr++ и подобные действия с выводом?
Спасибо, что дочитали=)