设计类时常常需要重载运算符,我发现重载输入输出流时都使用友元函数,为什么不用类成员函数呢?张宇老师说过,“能不能用,用了再说”,于是我用了。
std::istream & operator >>(std::istream & is, Student & stu); //输入一个字
//friends
friend std::istream & getline(std::istream & is, Student & stu);//输入一行
friend std::ostream & << (std::ostream & os, Student & stu); //输出
于是被编译器告知不能用,还告诉我是因为参数太多了。
这是为什么呢?有人说我这是类成员函数,只能有一个参数,因为另一个默认的参数是类对象自身。我觉得还挺有道理的,并不是说类成员函数只能有一个参数,只是需要两个操作数的操作符如+-*/<<,>>等如果申明为类成员函数时,第一个参数默认为类对象本身了。这也是+-就能在类成员函数中重载的原因。