增量操作符和流操作符的重载
++增量互有前增量和后增量区别,重载操作符时,虽然函数名相同,但是应有相应的区别.对于一个整型变量前增量操作符的结果与返回值变量是一致的,而后增量操作符返回的是一个临时变量。于是在增量操作符重载时也需要有前增量与后增量的区分。
前增量操作对象与返回对象是同一个变量,在反应对象的前增量操作时,要求参数为对象的引用,返回值也是对象的引用:
className& operator++() ;//前增量操作符设置为类成员函数
friend className& operator++(className&a) ;//前增量符作符设置为类友元函数。
而后增量符同样要求参数为引用,因为在调用上下中实参发生啦改变,但是为了与前增量符有所区别,C++提供了一个技术处理:
className operator++(int ) ;//后量操作符设置为类成员函数
friend className operator++(className &a,int i); //友元函数,调用后增量符违背了函数参数匹配的常规,但是编译器专门做了特殊处理。
对于流操作符。由于流操作符前置对象参数为ostream&out,它不是该类的对象,所以不可以设置为类的成员函数,必须设置为友元函数,友元函数不是类的成员函数,但是他的特殊之处在于他可以访问类的私有成员。所以有关流的操作符重载必须声明为友元函数,如 friend ostream& operator(className&a);