我们假设我们有两个班级Base
和Child
。 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
)访问常量值是不是最好?
答案 0 :(得分:1)
我有点好奇为什么人们倾向于使用基类来访问 那些变量,因为有时我们不确定知道哪些 classes是定义的值,更重要的是,它是可能的 子类可以覆盖base中定义的值 类。
当然,但这两种情况都是非常糟糕的代码,您希望避免它们。你不能覆盖枚举的值,你只能定义一个巧合命名的枚举。它将是一个完全不同的类型,它不会编译。
不确定它所定义的哪个类只对实现细节有用...用户必须知道要使用哪个类,所以他们找出并然后使用它。
通过使用定义枚举的类,没有真正的损失。