【发布时间】:2011-09-19 13:48:55
【问题描述】:
我遇到过这样的函数,而不是重载运算符
例子:
#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."); -
我会被
a.print(a.print(std::cout << "before" ) << "in between" ) << "after";激怒。不过。