对类操作的函数应该是成员函数还是非成员函数的规则是什么?例如,我有一个使用bools矩阵表示迷宫的类.我正在创建一个名为isConnected的函数,它验证迷宫中的2个点位于同一区域(即可以从A行进到B).
这应该是会员还是非会员?什么是好规则?
Mar*_*som 14
Herb Sutter说"如果合理可能的话,我们想让他们成为非成员的非朋友",而且他比我更聪明.
http://www.gotw.ca/gotw/084.htm
jal*_*alf 13
嗯,两者都存在争议.
赞成非成员函数:
container.begin()如果container是数组则无效.这使得编写处理容器的通用代码变得更加尴尬.但是begin(container)对于任何类型,甚至像数组这样的内置代码都可以有效.它还可以通过合成使mixins变得更加清晰,因为它不需要用户通过成员"点"自己来获取你想要操作的mixin对象.赞成制作会员功能的是:
而且......就是这样.(但是这个论点不应该被低估.代码可读性很重要,如果人们发现阅读成员版本更容易,那么这是一个有利的论据.它只是不会产生更好的代码.从严格的"更好的代码"从观点来看,应尽可能优先选择非成员.
Mr *_*ooz 11
何时使其成为成员函数:
何时使其成为独立功能
在这种情况下,我会选择成员函数。我遵循的规则是,如果一个函数必须访问实例当前状态内部的某些东西,那么它应该是类的“领域”的一部分。在这种情况下,A 和 B 的连通性取决于对象实例的状态。
当然,您最终可能会拥有一个责任过多的类。在这种情况下,保持简单的因素开始发挥作用,您应该考虑您的班级是否试图做太多事情。然后,拥有一个单独的类(例如,在您的情况下,一个 ConnectednessEvaluator)会很方便,它的具体作用是保存可以遍历并作用于您的迷宫实例的算法。
| 归档时间: |
|
| 查看次数: |
5318 次 |
| 最近记录: |