cout是ostream类的对象,cin是istream类的对象。
我们平时用的cout<<就相当于cout.operator<<(...)。也就是说正常使用(不对operator<<进行函数重载,我们用的都是ostream类库中本身定义好了函数)
而当我们需要对cout<<进行重载时,比如我们定义了一个类Student,他的一个对象s1,我们想要cout<<s1,这时<<的意义就改变了,由于ostream类库中已经定义好的成员函数我们是不能改写的,因此我们只能将<<重载成一个全局函数。
ex:
ostream& operator<<(ostream& co,const Student& s) {
co<<s.sname<<endl;
return co;
}
关于这个函数,有两点值得思考:
(1)它的返回值,是这样理解的:
cout<<5<<"hello";
在我们输出了一个5以后返回的是调用第一个<<的对象的引用,即相当于第一个cout,我们就可以接着连续的用同一个cout来调用第二个<<函数了。
(2)参数中引用的s对象,以及在函数体中直接调用s.sname,是需要我们把该函数设置成Student类的友元类的,这样该函数就相当于Student类的成员函数,可以直接访问到Student类的成员变量。