重载提取运算符的格式:
istream& operator>>(istream& scin,user_name& obj){
scin>>obj.a;
scin>>obj.b;
...........
return scin;
}
重载插入运算符的格式:
ostream& opreator<<(ostream& sout,user_name& obj){
sout<<obj.a;
sout<<obj.b;
...........
return sout;
}
其中,sout代表自己命名的一个输出流对象,scin代表自己命名的一个输入流对象,可以自己另外命名。user_name代表类名,obj代表类对象的引用,也是自己命名。
来看示例:
#include<iostream>
using namespace std;
class Base {
private:
int a;
float b;
public:
Base(int A, float B) {
a = A;
b = B;
}
friend ostream& operator<<(ostream& sout,Base& b) {
sout << b.a << " " << b.b;
return sout;
}
friend istream& operator>>(istream& sin, Base& b) {
sin >> b.a;
sin >> b.b;
return sin;
}
};
int main() {
Base test(200, 3.1415926535);
cout << test << endl;
cin >> test;
cout << test;
}
运行结果:
200 3.14159
100 278.33(这行是我的输入)
100 278.33
可见,声明为类的友元函数的重载运算符还能改变私有对象的值。