grig_p
05 березня 2022 р. 13:33

Работа с классами

Здравствуйте!
Столкнулся с проблемой. Не знаю, как к ней подойти.
Допустим, есть суперкласс и несколько подклассов, количество которых со временем будет расти. В этих классах имебтся статичные методы, имеющие один смысл, но работающие чуть по разному.

class Base
{
}

class C1 : public Base
{
    static void read();
    static void write();
    static void open();
    static void close();
    ...
}

class C2 : public Base
{
    static void read();
    static void write();
    static void open();
    static void close();
    ...
}

Мне нужно в зависимости от некоего строкового значения:
1) вызывать статичные методы нужного класса
2) создвавть экземпляры классов
Для вызова статичного метода просматривается следующий путь:

    if (st == StringValue1)
        C1::read();
    else
    if (st == StringValue2)
        C2::read();
    ...

Для создания экземпляра:

                    Base *base{nullptr} ;
                    if (st == StringValue1)
                        base = new C1();
                    else
                    if (st == StringValue2)
                        base = new C2();
                    ...

И так далее. Для вызова каждого метода нужно создавать линейку if - else if, что громоздко и в последствие сложно сопровождаемо.

Вопрос, можно ли как-то это упростить? Можно ли указать список в одном месте, а потом вызывать методы?
Буду очень благодарен за помощь.
С уважением, Григорий

2

Вам це подобається? Поділіться в соціальних мережах!

3
Виктор Калесников
  • 05 березня 2022 р. 15:02
  • (відредаговано)

Использовать switch и enum.

    Виктор Калесников
    • 05 березня 2022 р. 15:08
    • (відредаговано)

    Если совсем красиво делать то применить шаблон ООП "Стратегия"

      grig_p
      • 05 березня 2022 р. 15:17

      Спасибо.
      Но разве в switch можно использовать строки, как ключи?
      А чем поможет enum?

        Коментарі

        Only authorized users can post comments.
        Please, Log in or Sign up