首页 > 代码库 > 重载operator<<
重载operator<<
学习《深入探索》时,发现原文中提供的一个代码大致如下(书中第3页)
1 class Point3d2 {3 inline ostream&4 operator <<(ostream& os, const Porint3d &pt)5 {6 ...7 } 8 };
竟然编译不过(g++)。╮(╯_╰)╭实在有点坑啊,天真的我以为都是可以编译过的,果然实践是检验真理的唯一标准。网上一堆查,发现大致有两种说法:
- 输入输出运算符一般重载为友元函数,...
- 双目运算符可以重载为友元函数,也可以重载为成员函数,...
不免疑惑,怎么个情况啊,没具体说什么时候可以,什么时候不可以啊。好吧,自己来吧。
1 #include <iostream> 2 using namespace std; 3 4 class Point3d 5 { 6 private: 7 double x; 8 double y; 9 double z;10 public:11 Point3d(double tx, double ty, double tz);12 13 friend ostream&14 operator <<(ostream& os, const Point3d &pt);15 16 inline ostream&17 operator <<(ostream& os)18 {19 os<<"inline method, "<<"x: "<<x<<", y: "<<y<<", z: "<<z;20 return os;21 }22 };23 24 ostream&25 operator <<(ostream& os, const Point3d &pt)26 {27 os<<"friend method, "<<"x: "<<pt.x<<", y: "<<pt.y<<", z: "<<pt.z;28 return os;29 }30 31 Point3d::Point3d(double tx, double ty, double tz)32 {33 x=tx;34 y=ty;35 z=tz;36 }37 38 int main(void)39 {40 Point3d a(1,2,3);41 cout<<a<<endl;42 a<<cout<<endl;43 }
看着第42行代码那傲娇的样子,我只能给跪了。输出结果如下:
1 friend method, x: 1, y: 2, z: 32 inline method, x: 1, y: 2, z: 3
总之一句话,输入运算符>>,输出运算符<<,可以成员可以友元。
重载operator<<
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。