grig_p
Наурыз 5, 2022, 1: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
Виктор Калесников
  • Наурыз 5, 2022, 3:02 Т.Қ.
  • (өңделген)

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

    Виктор Калесников
    • Наурыз 5, 2022, 3:08 Т.Қ.
    • (өңделген)

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

      grig_p
      • Наурыз 5, 2022, 3:17 Т.Қ.

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

        Пікірлер

        Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
        Кіріңіз немесе Тіркеліңіз