使用嵌套C类和枚举的利弊?
使用嵌套的公共C类和枚举的优缺点是什么?例如,假设您有一个名为printer的类,此类还存储有关输出托盘的信息,您可以:
class printer { public: std::string name_; enum TYPE { TYPE_LOCAL,TYPE_NETWORK,}; class output_tray { ... }; ... }; printer prn; printer::TYPE type; printer::output_tray tray; 或者: class printer { public: std::string name_; ... }; enum PRINTER_TYPE { PRINTER_TYPE_LOCAL,PRINTER_TYPE_NETWORK,}; class output_tray { ... }; printer prn; PRINTER_TYPE type; output_tray tray; 我可以看到嵌套私人枚举/课程的好处,但是当谈到公共场所/办公室时,办公室就分开了 – 它似乎更像是一种风格选择. 那么,你更喜欢哪个?为什么? 解决方法
嵌套类
嵌套在类中的类有几个副作用我通常认为是缺陷(如果不是纯粹的反模式). 让我们想象下面的代码: class A { public : class B { /* etc. */ } ; // etc. } ; 甚至: class A { public : class B ; // etc. } ; class A::B { public : // etc. } ; 所以: > Privilegied Access:A :: B具有对A的所有成员(方法,变量,符号等)的特权访问,这削弱了封装 作为一个结论,除非例外(例如嵌套类是嵌套类的一个私密部分……即便如此……),我认为普通代码中的嵌套类没有任何意义,因为缺陷超出了大小的优势. 此外,它有点笨拙地尝试模拟命名空间而不使用C命名空间. 在pro方面,你隔离了这个代码,如果是私有的,那么它就无法使用,但是来自“外部”类…… 嵌套枚举 优点:一切. 骗局:没什么. 事实是枚举项将污染全球范围: // collision enum Value { empty = 7,undefined,defined } ; enum Glass { empty = 42,half,full } ; // empty is from Value or Glass? 通过将每个枚举放在不同的命名空间/类中,可以避免这种冲突: namespace Value { enum type { empty = 7,defined } ; } namespace Glass { enum type { empty = 42,full } ; } // Value::type e = Value::empty ; // Glass::type f = Glass::empty ; 注意C 0x定义了类枚举: enum class Value { empty,defined } ; enum class Glass { empty,full } ; // Value e = Value::empty ; // Glass f = Glass::empty ; 正是出于这种问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |