C++学习笔记12——重载操作符与转换

来源:互联网 发布:淘宝客如何找商家 编辑:程序博客网 时间:2024/05/16 06:05

重载操作符是具有特殊名称的函数:保留字operator后按需定义的操作符符号,带有返回类型和形参表:A operator+(const A &,const A)。除了函数调用符之外,重载操作符的形参数目(包括成员函数的隐式this指针)与操作符的操作数数目相同。重载操作符必须具有一个类类型操作数。操作符的优先级、结合性或操作数数目不能改变。作为类成员的重载函数,其形参看起来比操作数数目少1,作为成员函数的操作符有一个隐含的this形参,限定为第一个操作符。一般将算数和关系操作符定义为非成员函数,而将赋值操作符定义为成员函数。

操作符定义为非成员函数时,通常必须将他们设置为所操作类的友元。

重载操作符的设计原则:1、不要重载具有内置含义的操作符

2、为类设计操作符,最好的方式是首先设计类的公共接口,定义了接口之后,早决定哪些应该定义为重载操作符

3、如果一个类有算数操作符或位操作符,提供相应的复合赋值操作符一般是好的做法。

4、如果定义了相等操作符,也应该定义不等操作符!=;如果类定义了<,则它应该定义全部的四个关系操作符(>,>=,<,<=)。

通过定义转换操作符,给定类类型的对象,该操作符将产生其他类型的对象。通过转换机制,可以减少所需操作符的数目。转换操作符是一种特殊的类成员函数,在类定义体内声明,在保留字operator之后跟着转换目标的类型:operator type();

任何可作为函数返回类型的类型(void除外)都可以定义转换函数。不允许转换为数组或函数类型,可以转换为指针以及引用类型。

只要存在转换,编译器将在可以使用内置转换的地方自动调用。

显式构造函数调用可以消除二义性。

操作符的重载确定遵循常见的三步过程:

1、选择候选函数  2、选择可行函数   3、选择最佳匹配函数

 

原创粉丝点击