1.输入输出>>和<<的重载
>>和<<的重载只能用友元函数。
<<的重载格式严格为&ostream operator<<(&ostream,const class类&);其中返回值为ostream&,目的是为了级联。函数内两个参数的顺序不可以变化。
>>的重载格式为&istream operator>>(&istream,class类&);其中返回值为istream&为了级联,两个参数的顺序不可以改变。
2.前置++和后置++的重载
为了实现前置++和后置++的重载,我们先要理解这两个的特性,区别和联系。
过程:对于++a和a++,前置++比较简单,直接在令a自增1即可;而后置++要先创建一个当前a的副本,然后令a自增1,然后返回该副本。
返回值:而且前置++返回的是左值,后置++返回的是右值,比如说++(++)a可以编译通过,但(a++)++便不会编译通过。为了实现这一个特性,前置++返回一个类的引用,而
后置++返回一个const类。
函数原型:前置++和后置++的重载函数原型在原则上应该是一样的,但重载函数必须拥有不同的函数原型,虽然前置++和后置++的返回类型不同,但是返回类型不属于函数
原型。为了避开这一个语法限制,后置++的函数原型里面有一个int形参,该形参没有用处,纯粹是提示这是后置++而不是前置++。如果为double形参也可以,但是当时规定了int,
便沿用下来了。在函数定义中,int后也可以没有变量。
于是函数原型及其实现如下:
class test{
public:
test& operator++();
const test operator++(int);
private:
int a;
int b;
};
test& test::operator++()
{
a++;
b++;
return *(this);
}
const test test::operator++(int)
{
test temp;
temp=*(this);
a++;
b++;
return temp;
}
3.不能重载的运算符
在友元函数中,小括号,方括号和箭头不能用友元函数进行重载。