【发布时间】:2015-03-08 09:28:05
【问题描述】:
我已经编写了一个实现堆栈的程序。而且我有一个显示功能。
我一开始是这样写显示函数的:
template <class t>
void Mystack<t>::display()
{
for (int i = 0; i <= top; i++)
{
std::cout << input[i] << " ";
}
}
然后开发人员建议我编写一个更通用的显示函数。所以我把显示函数写成:
template <class T>
void Mystack<T>::display(std::ostream &os) const
{
for (int i = 0; i <= top; i++)
{
os << input[i] << " ";
}
}
据我了解,编写上述函数的好处是现在我有一个通用的显示函数,我可以使用它来将数据显示到控制台或文件中。
问题 1:我的理解正确吗?
现在另一个建议是编写如下函数:
template <typename T>
friend std::ostream& operator<<(std::ostream& s, Mystack<T> const& d) {
d.display(s);
return s;
}
问题2:以上显示功能有什么好处?有了上面的显示功能,我到底能实现什么?
【问题讨论】:
-
你可以写
std::cout << d;而不是d.print(std::cout)。 (您可以将std::cout替换为另一个输出流,例如文件)。 -
我认为你的问题很好,但标题有点误导。 “为什么以及如何重载运算符
-
我改了问题。
-
回复:问题2,是的,做吧!由于您做得对,它会“正常工作”的另一个地方是日志记录。使用一个流行的记录器的例子,LOG4CPLUS_DEBUG(m_logger, "stack has "
-
@KennyOstrom 完全不知道
"stack has " << stack是如何工作的。"stack has "是 C 风格的字符串文字,而不是std::ostream
标签: c++ operator-overloading friend