C++ 我应该使用基类还是子类来访问基类中定义的枚举值/常量?

C++ 我应该使用基类还是子类来访问基类中定义的枚举值/常量?,c++,class,enums,scope,constants,C++,Class,Enums,Scope,Constants,假设我们有两个类,Base和Child子项继承BaseValue是在Base中定义的常量变量(或枚举值),因此可以通过Base::Value访问它 现在我们正在处理一些类型为Child的变量。我注意到,在许多文档和示例代码中,人们倾向于使用Base::Value而不是Child::Value,尽管他们处理的是Child实例。例如,在Qt库中有QIODevice和QBuffer(后者是前者的子对象),并且QBuffer有一个方法open。文档倾向于使用类似于buffer.open(QIODevic

假设我们有两个类,
Base
Child
<代码>子项继承
Base
Value
是在
Base
中定义的常量变量(或枚举值),因此可以通过
Base::Value
访问它

现在我们正在处理一些类型为
Child
的变量。我注意到,在许多文档和示例代码中,人们倾向于使用
Base::Value
而不是
Child::Value
,尽管他们处理的是
Child
实例。例如,在Qt库中有
QIODevice
QBuffer
(后者是前者的子对象),并且
QBuffer
有一个方法
open
。文档倾向于使用类似于
buffer.open(QIODevice::ReadWrite,…)的东西而不是
buffer.open(QBuffer::ReadWrite,…)。我相信大家也经常看到许多其他例子

我有点好奇为什么人们倾向于使用基类来访问这些值,因为有时我们不确定在哪些类中定义了值,更重要的是,子类可能会覆盖基类中定义的值。那么,通过当前类(
WhateverClassBeingUsed::Value
)访问常量值不是最好的方法吗

我有点好奇为什么人们倾向于使用基类来访问 这些变量,因为有时我们不确定在哪种情况下 类是定义的值,更重要的是,它是可能的 子类可以重写在base中定义的值 上课

当然,但这两种情况都是非常糟糕的代码,您希望避免它们。不能重写枚举的值,只能定义一个同名的枚举。它将是一个完全不同的类型,并且不会编译

不确定在哪个类中定义它只对实现细节有用。。。用户必须知道要使用哪个类,这样他们才能找到并使用它


使用定义枚举的类不会造成真正的损失。

这是因为派生中的名称隐藏了基中的名称。但是,是的,那太可怕了。@T.C.:你忘了他把它传递给另一个函数的部分@啊,对了,如果函数采用枚举类型。如果它需要一个
int
,或者如果它是一个
静态常量int
,而不是一个枚举,它就会编译。@Kerrek:yes。阿凡达是这里的线索:P