我创建了一个Date
类型,其中有3个int成员day_
,month_
和year_
。
我已经为operator<<
重载了Date
,我不知道什么是最佳选择:我有一个名为ostream& showDate(ostream& os)
的函数,定义如下:
std::ostream& Date::showDate(std::ostream& os) const {
return os << day_ << '/' << month_ << '/' << year_ << std::endl;
}
operator<<
称之为:
std::ostream& operator<<(std::ostream& os, const Date& d) {
return d.showDate(os);
}
但还有另一种选择:
std::ostream& operator<<(std::ostream& os, const Date& d) {
return os << d.getDay() << '/' << d.getMonth() << '/' << d.getYear() << std::endl;
}
什么是最佳选择?
答案 0 :(得分:2)
第二个选项是最常用的方法,因此可能最具可读性(与常见模式匹配)。
它还有一个优点,Date
类不必知道有关流的任何信息。 showDate
成员函数引入了两个类之间的耦合,否则它们是独立的。
答案 1 :(得分:0)
对此的答案实际上是基于意见的。从技术上讲,任何选项都没有什么优势,因为它们在功能上是等效的(假设访问者的理智实现,适当的访问控制等)。
在你给出的三个功能相同的选择中,我倾向于第一个或第三个,因为除了{{1之外的任何其他函数通常不需要你的showDate()
成员函数。 }}
至于第一个和第三个之间的选择,这实际上取决于operator<<()
是否有意义直接访问类数据成员。如果成员是operator<<()
,则可能没有理由优先选择其中一个。如果它们是public
,则选择将取决于您的设计中private
是否为operator<<()
(即类的界面的一部分)是否有意义。
暂且不说:我不会在friend
内传播std::endl
。让班级用户决定换行和刷新是否合适。