首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OOP中使用友谊是明智的吗?

在OOP中使用友谊是明智的吗?
EN

Stack Overflow用户
提问于 2008-12-15 00:44:34
回答 5查看 607关注 0票数 4

我目前正在学习http://www.cplusplus.com教程,我在这里看到了这个部分:http://www.cplusplus.com/doc/tutorial/inheritance.html,它处理C++中的朋友函数和朋友类的主题。

我的问题是,什么时候在创建程序时使用友谊才是明智的呢?

我得到的唯一线索是文章中的一个例子,它演示了一个“复制”对象的朋友函数。

EN

回答 5

Stack Overflow用户

发布于 2008-12-15 00:49:52

在Marshall的C++常见问题解答中,有一些非常好的经验法则。

整件事都很好,但特别是看看“朋友是否违反了封装?”,看看正确使用它们的方法,以及什么时候最好拆分类并宣布它们为朋友。

票数 5
EN

Stack Overflow用户

发布于 2008-12-15 02:07:09

朋友函数的存在是为了将自由函数表示为类接口中的一个连续部分。在一些地方,空闲函数是类接口的一部分。示例:假设您有一个任意精度的类BigNum。以下是一些明显的朋友函数的候选人:

代码语言:javascript
复制
// binary operators where BigNum isn't the left-hand operand
BigNum operator+ (int, BigNum);
BigNum operator- (int, BigNum);

// stream operators
std::ostream &operator<< (std::ostream &os, const BigNum &num);
std::istream &operator>> (std::istream &is, BigNum &num);

现在,考虑到这两个例子,在许多情况下二进制操作符不需要成为朋友(例如,我可以通过委托给int + BigNum来实现BigNum + int,这是一个成员函数,因此已经可以完全访问)。但是,这完全取决于您对性能的需求,以及您愿意通过类的公共成员函数公开什么。

票数 4
EN

Stack Overflow用户

发布于 2008-12-15 03:15:19

朋友类的一个很好的应用程序是纪念品设计模式。

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

https://stackoverflow.com/questions/367219

复制
相关文章

相似问题

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