cout是全局的ostream对象
cin是全局的istream对象
内置类型如int,double类型可以直接使用cout和cin是因为库里面已经写好了运算符重载
对于自定义类型使用cout和cin需要自己写运算符的重载
cout<<
cin>>
注意事项:
cout和cin是作为运算符重载的第一个参数的,所以如果把运算符重载定义在类的内部,是不可以的因为在类里面默认第一个参数是隐藏的this,我们无法更改
虽然理论上我们可以写在ostream类的内部和istream类的内部
但是,这两个类是标准库中的类,我们无法访问 所以重载cout和cin只能写在类的外部
写在类的外部又必须涉及到访问类的成员,成员一般是私有的,所以需要把重载的cout和cin声明为友元
cout和cin经常调用,我们设置为内联
为支持连续调用cout << xx << xx
,需要返回值,返回值为cout 和 cin
cout不需要修改成员,第二个参数设置为const 对象的引用
cin需要修改成员,第二个参数为 对象的引用
class A{
public:
A(){}
~A(){}
//声明友元 访问成员
friend ostream& operator<<(ostream& out , const A& obj);
friend istream& operator>>(istream& in , A& obj);
private:
int a;
}
//全局
// 为了区分cout 形参设置为out
inline ostream& operator<<(ostream& out,const A& obj)
{
out<<obj.a<<endl;
}
//为了区分cin 形参设置为in
inline istream& operator>>(istream& in,A& obj)
{
in>>obj.a;
}