- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在阅读这样的代码:
class Member
{
public:
friend std::istream& operator>>(std::istream& in, Member& m)
{
in >> m.name >> m.bYear >> m.bMonth;
return in;
}
friend std::ostream& operator<<(std::ostream& out,const Member& m)
{
out << m.name << " " << m.bYear << "." << m.bMonth;
return out;
}
private:
std::string name;
int year;
int month;
};
我以前从未见过这种方式。使用 friend
在类主体中定义非成员函数是一种好习惯吗?有什么好处和坏处吗?
最佳答案
Is it a good practice to define nonmember function inside a class body with friend?
无关紧要的做法,我会说。
Any pros and cons?
运算符可以在类的作用域中引用类成员(嵌套类、typedef、枚举、常量、静态函数等),而无需显式地为它们加上类名前缀
隐式使用流功能很方便 inline
- 没有一个定义规则的麻烦
友元意味着您可以方便地访问所有非公开成员
学习类源代码的人更容易注意到流媒体功能
正如 Mike Seymour 评论的那样,如果类是模板,那么定义 friend 可以让您省略 template <
... >
运算符的方面,并将实例参数简单地称为 const Member&
而不是 const Member<
... >&
.
您可能想要一个外联函数定义,这样您可以稍后修改实现并且只需要重新链接(而不是重新编译)客户端代码
您授予的友元在功能上可能不是必需的,这会降低封装性并因此降低可维护性
寻找非成员(member)流媒体运营商的人可能不会考虑查看类(class)代码
您可能会争辩说它“弄乱”了类定义源代码,使得更难吸收实际类成员的全部
像往常一样,接口(interface)和实现的干净分离的好处——无论是管理物理依赖性(需要重新编译而不是仅仅重新链接)还是人类可读性——对于由不同的高级库使用的低级库和应用程序,并且对于本地实现的“私有(private)”支持要低得多(例如 .cpp
文件中的匿名命名空间中的类,仅由该单个翻译单元使用,或者 - 甚至更多 - private
嵌套类) .
关于c++ - 将非成员函数放在类中是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26523892/
在我生活的世界中,构建一个将所有飞镖都扔到墙上的解决方案,并希望其中一些能命中靶心是一种非常糟糕的解决方案方法。 那么,我的问题出现了,什么时候在约定可接受的生产系统中使用 INSERT IGNORE
在数据处理时,经常会因为index报错而发愁。不要紧,本次来和大家聊聊pandas中处理索引的几种常用方法。 1.读取时指定索引列 很多情况下,我们的数据源是 CSV 文件。假设
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
我是一名优秀的程序员,十分优秀!