Расширение перечислений: изучение наследования классов базовых перечислений
В C перечисления предоставляют удобный способ представления фиксированных наборов значений. Однако могут быть сценарии, в которых вы захотите наследовать значения из существующего класса перечисления. Этот вопрос исследует возможность достижения такого наследования.
Могут ли перечисления наследовать другие перечисления?
По умолчанию типы перечислений в C не могут наследовать от других перечислений. Однако мы можем использовать подход на основе классов для имитации наследования перечислений.
Наследование перечислений на основе классов
Следующий код демонстрирует, как создать базовое и производное перечисление. использование классов:
#include
#include
class Enum
{
public:
enum
{
One = 1,
Two,
Last
};
};
class EnumDeriv : public Enum
{
public:
enum
{
Three = Enum::Last,
Four,
Five
};
};
int main()
{
std::cout В этом примере класс Enum определяет перечисление с тремя значениями: One, Two и Last. Класс EnumDeriv наследует Enum и расширяет его, добавляя еще три значения: Three, Four и Five.
Значения перечисления ограничены пределами классов, что позволяет наследовать значения, сохраняя при этом уникальность имени. В этом случае мы можем получить доступ к EnumDeriv::One и EnumDeriv::Four без двусмысленности.
Преимущества наследования перечислений на основе классов
- Позволяет перечислениям наследовать и расширять существующие наборы значений.
- Обеспечивает согласованный и расширяемый способ для обработки наследования перечисления.
- Сохраняет уникальность имени в производном перечислении.
- Может использоваться в сочетании с другими функциями C , такими как шаблоны и макросы.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3