今天看到流运算符重载的时候有几个疑问,一是为何在只需声明一次friend即可,而不是在两个类之间都使用friend,二是为何不能重载为成员函数。
创新互联建站专注于镇宁企业网站建设,响应式网站建设,商城网站建设。镇宁网站建设公司,为镇宁等地区提供建站服务。全流程按需策划设计,专业设计,全程项目跟踪,创新互联建站专业和态度为您提供的服务
第一个问题:都使用friend,函数需要访问两个类的私有成员
第二个问题:重载为了成员函数,但应用上出现了问题,详情见代码。
using std::ostream; class a { public: ostream& operator<< (ostream & out) { out << x << y; return out; } friend ostream & operator<<(a & rhs, ostream & xout) { xout << rhs.x << rhs.y; return xout; } a(int s = 0, int q = 1) :x(s), y(q) { } private: int x; int y; }; int main() { a b; // b.operator<<(std::cout); //类的成员流运算符 // std::cout << b; //friend 流运算符重载 // b << std::cout; //friend 流运算符重载 或 成员流运算符的另一种形式 // operator<<(b, std::cout); //普通函数 /*第一种<<的实现对1,3输出均适用, 1. 作为a类的成员函数 2. 1不可以写为2 3. 1可以写为3 4. operator<< 函数未实现 第二种<<的实现对3,4适用 1. operator<<是普通函数,而非a的成员函数 2. 位置反了 3. 使用流运算符时,第一个参数在前 4. 普通函数的使用,函数名加参数 */ return 0; }