В C++ у меня есть несколько классов, наследующих от абстрактного суперкласса. Подклассы имеют статический атрибут, имеющий одно и то же имя type
, но, разумеется, имеют разные значения. Мой вопрос заключается в том, что является наилучшим подходом к реализации этого и каковы плюсы и минусы для каждой реализации.C++ как реализовать константные статические члены в производных классах
PS: Существует несколько связанных дискуссий, таких как here, но большинство из них не объясняют, почему подход (который работает на моей машине) 1 ниже не должен использоваться. Кроме того, методы подкласса в подходе 2 не являются статическими, и нам придется получить экземпляр для их вызова.
Apporach 1: uinitialized const static
в суперкласса
class Abstract {
public:
const static int type;
};
class C1: public Abstract {
public:
const static int type = 1;
};
class C2 : public Abstract {
public:
const static int type = 2;
};
подход 2: использование виртуальных функций вместо переменных
class Abstract {
public:
virtual int get_type() = 0;
};
class C1: public Abstract {
public:
int get_type() {return 1;}
};
class C2 : public Abstract {
public:
int get_type() {return 2;}
};
Другие подходы, которые я не в курсе ...
EDIT:
Как некоторые ответы/комментарии, упомянутые ниже, я пытаюсь определить фактический тип во время выполнения. Однако я не могу думать о более приятном дизайне.
Чтобы сделать бетон, скажем Abstract=EduInst
для образовательного учреждения, C1=Univ
, C2=College
и т.д. У меня есть std::map<Key, EduInst*>
хранящих все институты, которые создаются во время выполнения в зависимости от пользовательского ввода. Иногда мне нужно работать только на Univ
с или College
с. Что это хороший способ реализовать это?
В первых, у вас есть три разных, совершенно не связанные переменные. – molbdnilo
Но в подходах подхода2 в подклассе не статичны, поэтому у меня должен быть экземпляр для их вызова. – wlnirvana
Что вы пытаетесь сделать? 'switch' в динамическом типе переменной? – TartanLlama