Maz*_*ake 3 c++ operator-overloading
我遇到过函数,而不是重载运算符<<与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);
};
Run Code Online (Sandbox Code Playgroud)
实施的一个例子:
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;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行这个,我可以在不同的情况下使用不同的功能.例如
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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Object.number 1
Object.number 1
Run Code Online (Sandbox Code Playgroud)
似乎没有需要打印功能的情况,因为你只能单独使用或在"cout链"的开头使用,但从不在它的中间或末尾,这可能使它无用.它不会(如果没有找到其他用途)使用函数"void print()"更好吗?