重载操作符是具有特殊名称的函数:保留字operator后接所需定义的操作符符号。
重载操作符必须具有至少一个类类型或枚举类型的操作数,这条规则强制重载操作符不能重新定义用于内置类型对象操作符的含义,所以如int operator+(int ,int )是不合法的。
大多数重载操作符可以定义为普通非成员函数或类的成员函数,作为成员函数的操作符有一个隐含的this形参,限定为第一个操作数。
一般将算术和关系操作符定义为非成员函数,而将赋值操作符定义为成员。
也可以像调用普通函数一样调用重载操作符函数,指定函数并传递适当类型适当数目的形参。如:
cout << operator+(item1,item2) <<endl;
item1.operator+=(item2);
重载操作符的几条设计原则:
1.不要重载具有内置含义的操作符
重载逗号、取地址、逻辑与、逻辑或等操作符通常不是好做法,这些操作符具有有用的内置含义,如果我们定义了自己的版本,就不能再使用这些内置含义。
2.赋值( = )、下标( [ ] )、调用( () )和成员访问箭头( -> )等操作符必须定义为成员,将这些操作符定义为非成员函数将在编译时标记为错误。
3.像赋值一样,复合赋值操作符通常应定义为类的成员(但不是必须的)。
4.改变对象状态或与给定类型紧密联系的其他一些操作符,如自增、自减和解引用,通常应定义为类成员。
5.对成的操作符,如算术操作符、相等操作符、关系操作符和位操作符,最好定义为普通非成员函数。