输出流运算符的重载疑点
今天看到流运算符重载的时候有几个疑问,一是为何在只需声明一次friend即可,而不是在两个类之间都使用friend,二是为何不能重载为成员函数。
第一个问题:都使用friend,函数需要访问两个类的私有成员
第二个问题:重载为了成员函数,但应用上出现了问题,详情见代码。
usingstd::ostream;classa{public:ostream&operator<<(ostream&out){out<<x<<y;returnout;}friendostream&operator<<(a&rhs,ostream&xout){xout<<rhs.x<<rhs.y;returnxout;}a(ints=0,intq=1):x(s),y(q){}private:intx;inty;};intmain(){ab;//b.operator<<(std::cout);//类的成员流运算符//std::cout<<b;//friend流运算符重载//b<<std::cout;//friend流运算符重载或成员流运算符的另一种形式//operator<<(b,std::cout);//普通函数/*第一种<<的实现对1,3输出均适用,1.作为a类的成员函数2.1不可以写为23.1可以写为34.operator<<函数未实现第二种<<的实现对3,4适用1.operator<<是普通函数,而非a的成员函数2.位置反了3.使用流运算符时,第一个参数在前4.普通函数的使用,函数名加参数*/return0;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。