gpt4 book ai didi

c++ - 非成员非友元函数真的增加了封装性吗?

转载 作者:可可西里 更新时间:2023-11-01 16:30:58 25 4
gpt4 key购买 nike

我目前正在阅读 Scott Meyers 的 Effective C++ 一书,但我无法理解第 23 项。他说:

Prefer non-member non-friend functions to member functions. Doing so increases encapsulation, packaging flexibility, and functional extensibility.

虽然我可以看到在类外添加外部函数的意义,但我看不到它的优势。他谈到了这些,因为它们正在增加封装。嗯,是的,这是正确的,因为非成员非友元函数将无法访问在类中声明为私有(private)成员变量的任何成员变量。但是,这就是我无法解决的问题。拥有允许对象控制的成员函数在某种程度上是必不可少的——在所有数据成员都是公共(public)的 POD 中可以做什么?老实说,我在那里看不到任何实际用途。话虽如此,即使我们有非成员非友元函数,封装也不会改变,因为我们仍然需要 !!public!! MEMBER 函数与我们的对象进行交互。

那么为什么我 - 或其他任何人 - 更喜欢非成员非友元函数而不是成员函数?当然,我们可以在已经存在的成员函数上编写包装器,这可能会按逻辑顺序对它们进行分组,但仅此而已。我在这里看不到任何减少的封装。

最佳答案

Meyers 在 this article 中给出了他的推理.这是一个摘录:

We've now seen that a reasonable way to gauge the amount of encapsulation in a class is to count the number of functions that might be broken if the class's implementation changes. That being the case, it becomes clear that a class with n member functions is more encapsulated than a class with n+1 member functions. And that observation is what justifies my argument for preferring non-member non-friend functions to member functions: if a function f could be implemented as a member function or as a non-friend non-member function, making it a member would decrease encapsulation, while making it a non-member wouldn't.

关于c++ - 非成员非友元函数真的增加了封装性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26145639/

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