C++运算符重载实例解析:IO、算数及比较

需积分: 4 2 下载量 83 浏览量 更新于2024-07-31 收藏 70KB DOC 举报
在C++中,运算符重载是一种高级特性,允许程序员扩展类的行为,使其能够像内置运算符那样工作。这种技术主要用于自定义类的操作,使代码更具可读性和直观性。以下是一些关键的运算符重载方法: 1. **输出操作符<<**: - `friend ostream& operator<<(ostream& out, const SaleItem& s);` 这个友元函数用于实现非成员操作符<<,用于向标准输出流(如屏幕或文件)输出`SaleItem`对象。它通常处理私有数据,避免直接访问,以维护封装原则。这里,它输出`isbn`、`unitsold`和`revenue`字段,但不自动添加换行。 2. **输入操作符>>**: - `friend istream& operator>>(istream& in, const SaleItem& s);` 输入操作符>>也作为友元函数,处理用户从标准输入流读取`SaleItem`对象。它要求第二个操作数是引用而非常量,因为需要修改对象。输入过程中需要处理错误和文件结束的情况,例如,如果输入失败,会调用默认构造函数创建一个新的`SaleItem`对象,以表示错误状态。 3. **算术运算符+**: - `Complex::operator+(Complex& rhs)` (成员函数) 和 `friend SaleItem operator+(const SaleItem& lhs, const SaleItem& rhs)` (声明和定义) 这里展示了算数运算符+的重载,通常非成员函数更合适,以保持与内置操作符的一致性。通过使用复合赋值操作符`+=`,可以实现简洁而高效的操作。当两个`SaleItem`对象相加时,首先复制`lhs`到临时对象`ret`,然后将`rhs`加到`ret`上,最后返回结果。 4. **相等和不等运算符==和!=**: - `inline bool operator==(const SaleItem& lhs, const SaleItem& rhs)` 和 `inline bool operator!=(const SaleItem& lhs, const SaleItem& rhs)` 这两个运算符同时重载,因为它们是互逆操作。`==`操作检查`SaleItem`对象的`unitsold`、`revenue`和`isbn`是否相等,而`!=`则是`!`运算符应用于`==`的结果,提供直接的比较判断。 通过以上实例,我们可以看到C++运算符重载在类的设计中扮演了重要角色,使得类的行为能够适应各种操作,提高代码的可读性和灵活性。同时,需要注意重载运算符时的规则和细节,如友元函数的使用、错误处理以及运算符返回类型的选择,以确保程序的正确性和一致性。