Начну с того, что большинство из нас уже знает:
Если я хочу, чтобы мой класс был абстрактным, я должен определить хотя бы один из его методов как «чисто виртуальный», например, здесь метод someFunction()
определен как «чисто виртуальный», так как он определен с помощью ключевого слова virtual
, и он назначается с 0
:
class SomeClass {
virtual void someFunction() = 0;
};
Мой вопрос в том, когда мне нужен "абстрактный класс", то есть класс, который не может быть создан (например, "чистый виртуальный" класс), но я хочу реализовать все его методы. Есть ли какой-то стандартный способ сделать это?
Мой текущий обходной путь уродлив - я просто определяю еще один фиктивный чисто виртуальный метод:
class UglyWorkaround {
public:
virtual void doAction1();
virtual void doAction2();
// My ugly workaround for making the class abstract - defining a dummy method
virtual void thisIsADummyMethod() = 0;
};
Это очень плохо, так как любой производный неабстрактный класс должен будет реализовать это
Есть ли более стандартный/популярный способ определить и реализовать такой класс?
Я хочу пояснить: мне не нужен еще один уродливый обходной путь. Я спрашиваю, есть ли какой-нибудь стандартный способ, который обычно используется. Цель состоит в том, чтобы сделать код читаемым для других программистов, чтобы они сразу поняли, что класс является абстрактным.