operator<< overloading
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Operator overloading
我在这个问题上找不到任何能帮助我的东西…我正试图超载
1 2 3 4 | ostream& Complex::operator<<(ostream& out,const Complex& b){ out<<"("<<b.x<<","<<b.y<<")"; return out; } |
这是H文件中的声明:
1 | ostream& operator<<(ostream& out,const Complex& b); |
我得到这个错误:
什么?为什么我做错了?谢谢
你的
如果你做了你的
1 | std::cout << complex_number; |
但是
1 | complex_number << std::cout; |
相当于
1 | complex_number. operator << (std::cout); |
正如您可以注意到的,这不是常见的实践,这就是为什么
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class Complex { int a, b; public: Complex(int m, int d) { a = m; b = d; } friend ostream& operator<<(ostream& os, const Complex& complex); }; ostream& operator<<(ostream& os, const Complex& complex) { os << complex.a << '+' << complex.b << 'i'; return os; } int main() { Complex complex(5, 6); cout << complex; } |
更多信息在这里
如前所述,流重载需要是在类外部定义的自由函数。
就我个人而言,我更喜欢远离
1 2 3 4 5 6 7 8 9 10 | class Complex { public: std::ostream& output(std::ostream& s) const; }; std::ostream& operator<< (std::ostream& s, const Complex& c) { return c.output(s); } |