我应该使用基类或子类来访问基类中定义的枚举值/常量吗?

时间:2014-07-20 08:39:29

标签: c++ class enums scope constants

我们假设我们有两个班级BaseChildChild继承BaseValueBase中定义的常量变量(或枚举值),因此Base::Value可以访问它。

现在我们正在处理Child类型的一些变量。我注意到在许多文档和示例代码中,人们倾向于使用Base::Value而不是Child::Value,尽管他们正在处理Child个实例。例如,在Qt库中有QIODeviceQBuffer(后者是前者的孩子),QBuffer有方法open。文档倾向于使用类似buffer.open(QIODevice::ReadWrite, ...);而不是buffer.open(QBuffer::ReadWrite, ...);的内容。还有很多其他的例子,我相信你们经常见过。

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

1 个答案:

答案 0 :(得分:1)

  

我有点好奇为什么人们倾向于使用基类来访问   那些变量,因为有时我们不确定知道哪些   classes是定义的值,更重要的是,它是可能的   子类可以覆盖base中定义的值   类。

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

不确定它所定义的哪个类只对实现细节有用...用户必须知道要使用哪个类,所以他们找出并然后使用它。

通过使用定义枚举的类,没有真正的损失。