为什么 "C++ Core Guidelines" 推荐 prefer 独立函数而不是 class 成员?
Why does the "C++ Core Guidelines" recommends the prefer independent functions instead of class members?
C++ Core Guidelines section C.4推荐"make a function a member only if it needs direct access to the representation of a class",使用下面的例子:
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;
};
这个推理有什么好处?
它增加了封装
当您更改 Date 的私有实现时,您只需检查 // ... relatively small interface ...
以前的假设可能不再成立的地方,而不是 // ... relatively small interface ...
+ next_weekday
+ operator==
+ ...
成员函数 可以访问 class 的 private
个成员。这意味着他们可以在他们的逻辑中使用 class 的内部表示。
非成员函数 只能访问 class 的 public
个成员。这意味着他们只能使用class公开暴露的接口,从而提高封装性。
C++ Core Guidelines section C.4推荐"make a function a member only if it needs direct access to the representation of a class",使用下面的例子:
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;
};
这个推理有什么好处?
它增加了封装
当您更改 Date 的私有实现时,您只需检查 // ... relatively small interface ...
以前的假设可能不再成立的地方,而不是 // ... relatively small interface ...
+ next_weekday
+ operator==
+ ...
成员函数 可以访问 class 的 private
个成员。这意味着他们可以在他们的逻辑中使用 class 的内部表示。
非成员函数 只能访问 class 的 public
个成员。这意味着他们只能使用class公开暴露的接口,从而提高封装性。