gpt4 book ai didi

c++ - 类设计与 IDE : Are nonmember nonfriend functions really worth it?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:09:12 24 4
gpt4 key购买 nike

在(否则)优秀的书中 C++ Coding Standards , 第 44 项,标题为 “首选编写非成员非友元函数”,Sutter 和 Alexandrescu 建议只有真正需要访问类成员的函数本身才是该类的成员。所有其他可以仅使用成员函数编写的操作不应该是类的一部分。他们应该是非成员和非 friend 。论点是:

  • 它促进了封装,因为需要访问类内部的代码更少。
  • 它使编写函数模板更容易,因为您不必每次都猜测某个函数是否是成员。
  • 它使类变小,从而更易于测试和维护。

虽然我看到了这些论点的值(value),但我看到了一个巨大的缺点:我的 IDE 不能帮我找到这些函数!每当我有某种对象,我想看看它有哪些操作可用,我不能再键入“pMysteriousObject->”并获取成员函数列表。

保持简洁的设计最终是为了让您的编程生活更轻松。但这实际上会使我的工作变得更加困难。

所以我想知道这是否真的值得麻烦。 你是如何处理的?

最佳答案

Scott Meyers 与 Sutter 的观点相似,参见 here .

他还明确指出:

“基于他对各种类似字符串的类的研究,Jack Reeves 观察到一些函数在成为非成员时“感觉”不对,即使它们可能是非友元非成员. 类的“最佳”接口(interface)只能通过平衡许多相互竞争的关注点来找到,其中封装程度只是其中之一。”

如果一个函数作为成员函数“恰到好处”,那就让它成为一个成员函数。同样,如果它实际上不是主界面的一部分,并且成为非成员(member)“只是有意义”,那就去做吧。

需要注意的是,对于例如 operator==() 的重载版本,语法保持不变。因此,在这种情况下,您没有理由使其成为与类在同一位置声明的非成员非友元 float 函数,除非它确实需要访问私有(private)成员(以我的经验很少会)。即便如此,您也可以根据 operator==() 将 operator!=() 定义为非成员。

关于c++ - 类设计与 IDE : Are nonmember nonfriend functions really worth it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/135634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com