我曾遇到一些函数,它们不是通过重载运算符<<来与cout一起使用,而是声明一个接受ostream并返回ostream的函数。
例如:
#include <iostream>
class A {
private:
int number;
public:
A(int n) : number(n) {}
~A() {}
std::ostream& print(std::ostream& os) const;
friend std::ostream& operator<<(std::ostream& os, const A a);
};
一个实现的例子:
std::ostream& A::print(std::ostream& os) const {
os << "number " << number;
return os;
}
std::ostream& operator<<(std::ostream& os, const A a) {
os << "number " << a.number;
return os;
}
现在,如果我运行它,我可以在不同的情况下使用不同的函数。例如:
int main() {
A a(1);
std::cout << "Object."; a.print(std::cout);
std::cout << "\n\n";
std::cout << "Object." << a;
std::cout << "\n\n";
return 0;
}
输出:
Object.number 1
Object.number 1
似乎没有必要使用打印函数,因为你只能单独使用它或在“cout链”的开头使用它,但永远不能在中间或结尾使用它,这使得它变得无用。如果找不到其他用途,使用一个“void print()”函数是否更好呢?
a.print(std::cout << "Object.");
- N_Aa.print(a.print(std::cout << "before" ) << "in between" ) << "after";
。 - MSalters