【C++ Primer】第14章 重载操作符与转换

14章 重载操作符与转换

不能通过连接其他合法符号来创建任何新的操作符

重载操作符必须有一个类类型或枚举操作数,不能为任何内置类型定义额外的新的操作符

优先级和结合性是固定的

不再具备短路求值特性

一般将算术和关系操作符定义为非成员函数,将赋值操作符定义为成员

使用重载操作符,可以和在内置类型上一样,也可以像调用普通函数那样

不要重载具有内置含义的操作符,比如逗号,赋值,取地址等

大多数的操作符对类对象没有意义

选择成员or非成员实现

赋值、下标、调用(),成员访问箭头等,必须定义为成员

复合赋值操作符通常定义为成员,但也可不必

改变对象状态与给定类型紧密结合的操作符,自增自减,解引用,通常定义为类成员

对称的操作符,算术操作,相等操作,关系操作,位操作,最好定义为非成员

输入和输出操作符

重载<<, ostream& operator << (ostream& os, const ClassType &object)

IO操作符必须为非成员函数,否则左操作数只能是该类型的对象

重载>>istream& operator >> (istream& os, ClassType &object)

输入操作符必须处理错误和文件结束的可能性

算术操作符和关系操作符

一般将它们定义为非成员

加法返回的是一个右值,而非引用

如果定义了operator==,那么最好也定义operator!=

赋值操作符

赋值必须返回对*this的引用

下标操作符

下标操作符必须定义为成员函数

类定义下标操作符时,一定要定义两个版本,一个非const成员并返回引用,另一个const成员并返回const引用

成员访问操作符

也需要解引用操作符的const和非const版本

重载箭头操作符必须返回指向类类型的指针,或者返回定义了自己的箭头操作符的类类型

自增和自减操作符

前缀式操作符返回被增量或减量对象的引用,后缀式操作符返回旧值,作为值返回,而不是引用

CheckedPtr& operator++()//前缀

CheckedPtr operator++(int)

调用操作符和函数对象

函数调用操作符必须定义为成员函数,一个类可以定义多个版本,由形参加以区别

转换与类类型

转换操作符通常定义为const成员,不改变被转换的对象

 

你可能感兴趣的:(C++,Primer)