首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遗产只是为了分享恩怨-危险吗?

遗产只是为了分享恩怨-危险吗?
EN

Stack Overflow用户
提问于 2017-03-12 06:42:07
回答 1查看 153关注 0票数 2

每当我想在许多文件中共享一个枚举时,我都会:-

  • 创建一个类,例如专门用于枚举的B
  • 希望轻松访问枚举的类将从B派生。

大多数情况下,会有一个班级对一个枚举。(1:1)

代码语言:javascript
复制
class B{
    public: enum EnumB{ E1,E2 };  
};
class C : public B{ /* .... access EnumB */}; //a kind of struct
class D : public B{ /* .... access EnumB */}; //a kind of widget/manager

这种方法使CD能够在没有前缀 B的情况下访问EnumB

我认为这没问题,因为我在一个非常狭窄的范围内使用这些枚举。(2-4班)

[经]某某职位还指出,可以将继承用于实用程序。

然而,我并不认为这是一种流行的方法:-

问题

  • 我的方法有多危险?它的缺点是什么?在实际情况下,我倾向于多继承许多类。 类ShadowEnum{ public: enum ShadowE{ NO_SHADOW};};类ColorEnum { public: enum ColorE{ RED,BLUE,GREEN,紫} };类LightType{ public: enum LightE{ L_SPHERE,L_CONE,L_SPOT};};
  • 这会不会成为未来一个令人恐惧的钻石问题的原因?

顺便说一下,我认为明灯级不在这个问题的范围之内。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-12 07:27:53

它本身并不“危险”。只是设计得不好。

类继承应该定义一个IS-A关系。

当继承一些非“自然”的东西时,您可能会在以后的开发过程中遇到问题。

其中一些可能影响您的设计含义是:

  1. 同一类在更深层次的继承图中的多个继承。
  2. 如果将来更改继承结构,指针转换可能会受到影响(这是您不希望仅仅为了方便继承而发生的事情)。

有几个更好的解决方案:

  1. 在命名空间中包含枚举-使用#使用命名空间。在标头中添加该信息将传播到包含该标头的任何编译单元。
  2. 在C++11中,您可以只使用枚举类 --不是在继承中,而是提供了更强的类型安全性。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42744566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档