Добавить классы в массив

165
25 апреля 2018, 06:46

У меня есть куча классов. Я в цикле хочу создать объект каждого класса и вызвать у него определенный метод. Все классы являются дочерними( и внучатыми) одного родительского.
Как можно это реализовать?

class A {
    void f();
}
class B: public A { }
class C: public A { }
class D: public C { }
class E: public A { }
class F: public A { }
class G: public A { }
void main () {
    // тут волшебный код который вы мне сейчас подскажите
    // и в итоге получится массив классов mClass[7]
    for (int i = 0; i < 7; i++) {
        mClass[i] t;
        t.f();
    }
}
Answer 1

Элементами массива могут быть только объекты одного и того же типа. Если хочется запихнуть в него объекты разных классов, то это будет кортеж. Создать кортеж и вызвать метод для каждого объекта можно так:

::std::tuple<A, B, C, D, E, F, G> items{};
::std::apply([](auto &&... item){(item.f(),...);}, items);

online compiler

READ ALSO
c++ как брать данные из интернета? [требует правки]

c++ как брать данные из интернета? [требует правки]

Скорее всего вопрос поставлен некорректно, но суть таковаХочу написать небольшое приложение

189
Ошибка С2061 по непонятным причинам

Ошибка С2061 по непонятным причинам

В моей программе (лабораторная работа на тему наследования по Павловской) возникает ряд ошибок указывающих на то, что я сделал синтаксическую...

188
Не работает отладчик для компилятора MVSC в Qt creator

Не работает отладчик для компилятора MVSC в Qt creator

Устанавливал VS 2015 communityПотом зашел в комплекты выбрал комплект MVSC 32 компилятора, для этого комплекта выбрал 1 из нескольких MVSC компиляторов,...

203
Вывод адреса метода класса. Различия в выводе с помощью printf() и cout

Вывод адреса метода класса. Различия в выводе с помощью printf() и cout

Добрый деньОбъясните пожалуйста, почему когда я пытаюсь вывести адрес метода класса с помощью функции printf(), он выводится в консоль в обычном...

171