gpt4 book ai didi

c++11 - 枚举对继承的支持

转载 作者:行者123 更新时间:2023-12-02 10:21:03 24 4
gpt4 key购买 nike

我经常遇到这样的情况:我们创建一个作用于某些枚举的类,但后来我们派生并希望在不更改基类的情况下向枚举添加更多值。

我在 2009 年看到这个问题: Base enum class inheritance

但是,我知道 C++11、14、17 中对枚举进行了许多更改。这些更改是否允许将枚举从基类扩展到派生类?

class Base 
{
enum State {STATE_1, STATE_2, STATE_3};
};

class Derived : public Base
{
enum State {STATE_4};
};

...我们希望导出有一个枚举来描述它可以处于的状态,这些状态是:STATE_1、STATE_2、STATE_3 和 STATE_4。我们并不是真的想更改基类中的枚举,因为其他派生类可能没有能力处于 STATE_4 状态。我们也不想创建一个新的枚举,因为我们已经在 Base 中有一个 State 枚举。

为了在 8 年后实现这一目标,我们是否仍然使用静态 const 值?

class Base 
{
static int STATE_1= 0;
static int STATE_2= 1;
static int STATE_3= 2;
};

class Derived : public Base
{
static int STATE_4= 3;
};

最佳答案

不,C++ 不允许这种事情。 Base::Color 是与 Derived::Color 完全独立的类型,与它们之间的连接为零。这与任何其他嵌套类型没有什么不同;基类中定义的嵌套类型不连接到派生类中定义的嵌套类型。

枚举也不能相互继承。

无论如何,这类事情往往违背良好的 OOP 实践。毕竟,如果派生类引入了新的枚举器,基类将如何处理它?不同的派生类实例将如何处理它?<​​/p>

如果Base定义了对枚举的操作,那么Base定义了它所操作的枚举的整体,并且从它派生的每个类都应该能够处理所有这些选项。否则,您的虚拟接口(interface)就会出现严重问题。

关于c++11 - 枚举对继承的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42913431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com