首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >好友函数,cpp

好友函数,cpp
EN

Stack Overflow用户
提问于 2011-09-22 20:23:16
回答 3查看 750关注 0票数 1

我们在学校有一个作业,实现了一个重载所有算术运算符的Matrix类。我所做的是(例如)将+=定义为成员函数,然后将+定义为使用+=函数的非成员函数(两者都在同一文件中,但+在类之外)。学校的工作人员做了类似的事情,只是他们声明了'+‘作为朋友函数(还使用了+=的实现)。

由于这两种实现都工作得很好,所以我想知道朋友函数能给我什么,而非成员函数不能?什么时候我应该选择两者而不是其他?

谢谢!Yotam

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-22 20:51:52

最好不要声明函数friends,如果它们可以通过类的公共接口实现(比如成员operator+=中的operator+

不知何故,对于运算符,有时人们倾向于认为,当作为自由函数实现时,它们需要自动声明为好友。例如,您可能听说operator<<不能作为成员函数实现(因为左操作数是ostream),因此它需要是一个自由友元函数。实际上,只有当它需要访问私有/受保护的成员和成员函数时,它才需要成为朋友。

(我怀疑这可能是因为重载运算符,由于其特殊的调用语法,感觉不像普通函数,似乎与它的操作数有某种神奇的联系,需要在类定义中表达)。

票数 4
EN

Stack Overflow用户

发布于 2011-09-22 20:27:09

好友版本可以访问您的类的成员。一个普通的非成员不需要。这可能会很有用。

票数 1
EN

Stack Overflow用户

发布于 2011-09-22 20:30:18

通过阅读朋友函数的定义,您将获得问题的答案。

友好函数在面向对象编程中使用,允许从外部访问类中的私有或受保护的数据。通常,不是类成员的函数不能访问此类信息;外部类也不能。有时,这样的访问对程序员是有利的。在这些情况下,可以使用friend关键字将函数或外部类声明为类的朋友。然后,函数或外部类将可以访问类中的所有信息-公共的、私有的或受保护的。

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

https://stackoverflow.com/questions/7514655

复制
相关文章

相似问题

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