当前位置:  开发笔记 > 编程语言 > 正文

成员函数与非成员函数?

如何解决《成员函数与非成员函数?》经验,为你挑选了3个好方法。

对类操作的函数应该是成员函数还是非成员函数的规则是什么?例如,我有一个使用bools矩阵表示迷宫的类.我正在创建一个名为isConnected的函数,它验证迷宫中的2个点位于同一区域(即可以从A行进到B).

这应该是会员还是非会员?什么是好规则?



1> Mark Ransom..:

Herb Sutter说"如果合理可能的话,我们想让他们成为非成员的非朋友",而且他比我更聪明.

http://www.gotw.ca/gotw/084.htm


我完全同意......我甚至不知道Sutter推荐这个.

2> jalf..:

嗯,两者都存在争议.

赞成非成员函数:

它提供更好的封装

它允许更好的代码重用(std :: find可以重用于任何容器类型,因为它是一个自由函数.如果它是一个成员,那么容器必须定义它自己的)

它使很多通用编程技巧变得更容易.(container.begin()如果container是数组则无效.这使得编写处理容器的通用代码变得更加尴尬.但是begin(container)对于任何类型,甚至像数组这样的内置代码都可以有效.它还可以通过合成使mixins变得更加清晰,因为它不需要用户通过成员"点"自己来获取你想要操作的mixin对象.

赞成制作会员功能的是:

这很熟悉.Java和C#需要这个,在很多程序员看来,成员函数是OOP的同义词.

而且......就是这样.(但是这个论点不应该被低估.代码可读性很重要,如果人们发现阅读成员版本更容易,那么这是一个有利的论据.它只是不会产生更好的代码.从严格的"更好的代码"从观点来看,应尽可能优先选择非成员.



3> Mr Fooz..:

何时使其成为成员函数:

当函数与类逻辑耦合时(如迷宫连接示例)

当函数需要访问私有或受保护的成员时,最好使其成为成员而不是朋友.

何时使其成为独立功能

当它是一个通用函数,可以被模板化以自然地在其他类上工作(查看标题以获得良好示例)


为什么?这些指导原则的基本原理是什么?
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有