首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >成员函数还是非成员函数?

成员函数还是非成员函数?
EN

Stack Overflow用户
提问于 2009-04-03 22:07:47
回答 6查看 5.9K关注 0票数 8

对于在类上操作的函数应该是成员函数还是非成员函数,您的规则是什么?例如,我有一个使用布尔矩阵表示迷宫的类。我正在制作一个名为isConnected的函数,它验证迷宫中的两个点是否在同一区域(即可以从A到B)。

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-04-03 22:14:13

何时使其成为成员函数:

  • 当函数与类逻辑耦合时(如您的迷宫连通性示例)
  • 当函数需要访问私有或受保护的成员时,最好将其设置为成员而不是朋友。

何时将其设置为独立函数

  • 当它是一个泛型函数时,可以模板化以自然地在其他类上工作(查看标题可以获得很好的示例)
票数 11
EN

Stack Overflow用户

发布于 2009-04-03 22:46:57

Herb Sutter说:“如果可能的话,我们想让他们成为非会员非朋友”,他比我聪明。

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

票数 15
EN

Stack Overflow用户

发布于 2009-04-03 23:35:14

好吧,这两个都有论据。

支持非成员函数:

better encapsulation

  • It提供的
  • 允许更好的代码重用(std::
  • 可以重用于任何容器类型,因为它是一个免费函数。如果它是一个成员,任何容器都必须定义它自己)
  • 它使得很多泛型编程技巧变得更容易。(如果container是数组,则container.begin()无效。这使得编写在容器上工作的泛型代码变得有点笨拙。但是begin(container)可以对任何类型有效,即使是像数组这样的内置类型)。它还可以通过组合使mixin更干净,因为它不需要用户在成员之间“点”您自己来获得您想要操作的mixin对象。

支持将事物作为成员函数的方法是:

  • ,这很熟悉。Java和C#需要这样做,在许多程序员看来,成员函数是OOP的同义词。

还有..。就这样。(但这一论点不应被低估。代码的可读性很重要,如果人们发现成员版本更容易阅读,这是对其有利的一个强有力的论据。它并不能产生更好的代码。从严格的“更好的代码”的角度来看,在可能的情况下应该首选非成员。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/715919

复制
相关文章

相似问题

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