C++编程:重载操作符与用户定义转换的策略

需积分: 48 185 下载量 92 浏览量 更新于2024-08-10 收藏 4.41MB PDF 举报
"《C++ Primer Plus》第三版,作者:Stanley B. Lippman 和 Josée Lajoie,中文版,由潘爱民、张丽译,由Addison-Wesley出版,中国电力出版社发行。" 在C++编程中,重载操作符是一种强大的特性,允许我们为同一个操作符赋予不同的含义,根据操作数的类型来选择适当的方法。标题提到的“节介绍涉及重载操作符的函数”主要讨论了如何在C++中正确地重载操作符,特别是在处理自定义类如String时的情况。 描述中提到了两个关键点: 1. **重载操作符的调用**:当使用`flower == "lily"`这样的表达式时,编译器会调用接受String对象和字符指针的重载操作符`bool operator==( const String &, const char * );`。然而,对于`"tulip" == flower`,虽然没有定义接受字符指针作为左操作数的重载操作符,但编译器依然可以通过类型转换调用`bool operator==( const String &, const String & );`,这是因为C++在重载操作符时会考虑潜在的类型转换。 2. **类型转换与重载**:是否需要提供像`bool operator==( const char *, const String & );`这样的重载,取决于类型转换的开销。如果频繁比较C风格字符串和String对象,提供所有三个重载操作符(包括左右两边的转换)可以提高效率。而在某些情况下,如果只定义接受两个String对象的重载操作符,编译器也会自动处理从C风格字符串到String的转换。 这里强调了一个重要的决策因素:**何时将操作符声明为类成员或命名空间成员**。如果操作符需要作用于类的对象作为左操作数,那么它应当是类的成员函数。否则,如果需要处理不同类型的操作数,操作符应作为全局(命名空间)函数来重载,以便于处理不同类型之间的操作。 在C++中,**函数重载解析**是非常关键的过程,它决定了哪个重载版本会被调用。15.9节将更深入地探讨类类型转换在构造函数中的应用,15.10节将回顾函数重载解析,特别关注类类型的转换,15.12节则专注于涉及重载操作符的函数重载解析。 理解和熟练运用操作符重载是C++编程中必不可少的技能,它允许我们编写更加自然和直观的代码,同时需要注意优化和类型转换的影响,以确保代码的效率和清晰度。《C++ Primer Plus》作为一本权威的C++教程,对这些概念提供了深入且易于理解的解释。