C++编程:重载操作符与转换在keil5中使用pc-lint9.0教程

需积分: 31 16 下载量 171 浏览量 更新于2024-08-10 收藏 3.18MB PDF 举报
"这篇教程主要讨论了C++中的重载操作符与转换,以及如何在keil5中使用pc-lint9.0。教程涵盖了C++ Primer中的第1至16章内容,特别是关于类的成员函数和友元函数的使用,以及操作符重载的规则和实践应用。" 在C++编程中,操作符重载是让类能够自定义特定操作符行为的关键特性。当类类型的操作数涉及到内置操作符时,如加法`+`、乘法`*`或流输入/输出操作符`<<`、`>>`,我们可以通过重载这些操作符使得它们能正确处理类的对象。重载操作符需要遵循一些规则: 1. 重载操作符必须至少有一个类类型或枚举类型的操作数。 2. 重载操作符不保证操作数的求值顺序,例如重载的`&&`和`||`不再有短路求值的特性,这与内置操作符不同。 3. 优先级、结合性和操作数数目在重载操作符中保持不变。 在给定的描述中,提到了`Sales_item`类的例子,该类重载了输入`>>`、输出`<<`以及加法`+`和复合赋值`+=`操作符。这是为了让`Sales_item`对象能够像内置类型一样方便地进行输入、输出和算术运算。 ```cpp class Sales_item { public: friend std::istream& operator >> (std::istream&, Sales_item&); friend std::ostream& operator <<(std::ostream&, const Sales_item&); Sales_item& operator += (const Sales_item&); }; Sales_item operator+ (const Sales_item&, const Sales_item&); ``` 这里,`friend`关键字使得输入和输出操作符可以直接访问`Sales_item`的私有和保护成员,而不需要公开这些成员。`operator +=`是一个成员函数,负责将另一个`Sales_item`对象加到当前对象上,而`operator +`是全局函数,它接收两个`Sales_item`对象并返回一个新的`Sales_item`对象。 描述中还提到了一个程序示例,涉及了`Sales_item`的构造函数和操作符重载的使用。当`Sales_item`的构造函数不是`explicit`时,可以隐式地从`string`转换为`Sales_item`,这在第三句中体现出来。如果构造函数被声明为`explicit`,则不允许这种隐式转换,需要显式地创建`Sales_item`对象。 ```cpp string null_book = "0-000-00000-0"; Sales_item item(cin); item += null_book; ``` 在这个例子中,`null_book`通过构造函数被转换为`Sales_item`临时对象,然后通过`+=`操作符将其添加到`item`对象中。 整个教程涵盖了C++语言的基础到进阶主题,包括变量、类型、标准库、容器、算法、类和面向对象编程等,这些都是学习和掌握C++编程的重要部分。通过解决习题,读者可以巩固理解并熟练运用这些概念和技术。