繁体   English   中英

类函数成员不依赖于类成员

[英]Class function member not depending on the class members

如果一个类函数成员不依赖于该类的任何成员,那么它是否有充分的理由成为该类的一部分?

不。实际上, 您应该更喜欢免费功能而不是成员功能 只有真正需要对成员进行操作的函数才应该是成员函数, 其余的应该使用它们来提供功能

假设你的意思是“不依赖于任何非公共成员”,斯科特迈尔斯曾经回答一个明确的没有这个问题。

但是,他只关注封装:通过使这些函数成为非成员来改进封装。

例如,其他注意事项可能包括如果将运算符定义为非成员,则不能在临时函数上调用operator<< (为什么你会想要这样做?好吧,例如从组成部分建立一个字符串参数,iostream风格。)

考虑因素可以简单地包括使用符号的自然和清晰程度。 嵌套调用的符号(与非成员一样)可能相当烦人且不清楚。 这就是为什么我们有->作为*解除引用+成员选择的语法糖。

因此,如果您只关注封装,那么将这些成员函数移出课堂,正如Scott Meyers所建议的那样。 否则,在考虑可用性和符号清晰度等方面做出工程决策。 无论如何,不​​要担心它:它可能不是非常重要。 :-)

干杯&hth。,

如果它与类的含义相关,即使它不使用类的任何成员,也应该将它放在一起。

它只是开发的原因,并为未来的开发人员知道在哪里看。

它通常在覆盖虚函数时发生。 例如,如果基类具有沿getWidgetCount()行的纯虚拟,并且派生类不支持小部件,则它将返回0。

最常见的情况涉及实用程序类,例如,如果我必须开发将BSTR转换为字符串的函数,反之亦然,我可以使用静态方法创建一个类。

将相同区域的函数打包在同一个类中是有用的,另一个解决方案是将它们打包在同一个命名空间中,但不幸的是,即使在众所周知的c ++库中,命名空间也不常用。

而对于其他情况,向与其他成员无关的类添加方法会增加内聚力的缺乏,并且度量LCOM将会很高,并且设计将受到影响。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM