【问题标题】:Why does the "C++ Core Guidelines" recommends the prefer independent functions instead of class members? [duplicate]为什么《C++ 核心指南》推荐首选独立函数而不是类成员? [复制]
【发布时间】:2017-05-11 13:02:56
【问题描述】:

C++ Core Guidelines section C.4 建议“仅当函数需要直接访问类的表示时才将其设为成员”,使用以下示例:

class Date {
    // ... relatively small interface ...
};

// helper functions:
Date next_weekday(Date);
bool operator==(Date, Date);

我不明白这里的推理。在我看来,这将是一个更好的选择:

class Date {
    // ... relatively small interface ...

    Date next_weekday(Date const&) const;
    bool operator==(Date const&) const;
};

这种推理有什么好处?

【问题讨论】:

  • 为什么您认为成员函数会是更好的选择? :)
  • 我同意你的观点,但前提是制作“辅助功能”static
  • 我希望你知道“不要为你不使用的东西付费”的 C++ 代码哲学。可以说,打破封装是要付出代价的。所以这个指南只是将同样的理念应用于打破封装的代价。
  • 尽管这是一个骗局,但我不同意反对意见。从核心指南到 Scott Meyer 所写的内容并非易事。另外,另一个问题知道这是关于封装的。最后,CG指定独立,另一篇文章是关于非会员的。简而言之,对于大多数人来说,找到副本并非易事。

标签: c++ class-method


【解决方案1】:

成员函数可以访问类的private 成员。这意味着他们可以在逻辑中使用类的内部表示。

非成员函数只能访问类的public 成员。这意味着它们只能使用类的公开暴露的接口,从而提高封装性。

【讨论】:

    【解决方案2】:

    增加封装

    当您更改 Date 的私有实现时,您只需检查 // ... relatively small interface ... 以查找以前的假设可能不再成立的地方,而不是 // ... relatively small interface ... + next_weekday + operator== + ...

    【讨论】:

      猜你喜欢
      • 2018-02-12
      • 2021-02-17
      • 1970-01-01
      • 2021-09-26
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      相关资源
      最近更新 更多