警告和确信-learning ros for robotics programming - second edition
11.1 警告和确信对于运算符重载,人们容易变得过于热心。它是一个娱乐玩具。注意,它仅仅是一个语法修饰,是另外一种调用函数的方法而已。用这种眼光看,没有理由重载一个运算符,除非它会使包含我们的类的代码变得更易写,尤其是更易读。(记住,读代码的情况更多)如果不是这种情况,就不必麻烦去重载运算符。对于运算符重载,另外一个通常的反映是恐慌:突然,C运算符不再有熟悉的意思。“所有的东西都改变了,我的所有C代码将做不同的事情!”但这不是事实。所有用于仅包含内部数据类型的表达式的运算符是不可能被改变的。我们永远不能重载下面的运算符使执行的行为不同。1 << 4;或者重载运算符使得下面的表达式有意义。1.414 << 2;仅仅是包含用户自定义类型的表达式可以有重载的运算符。
如果你想了解更多关于 Python 运算符重载的实际应用,可以参考这个Python 运算符重载的例子。而对于 C++ 中运算符重载的详细规则和实例,不妨看看这篇详解 C++ 编程中的单目运算符重载与双目运算符重载,它详细介绍了重载运算符的不同方式及其实现细节。
11.2 语法定义一个重载运算符就像定义一个函数,只是该函数的名字是 operator @
,这里 @
代表运算符。函数参数表中参数的个数取决于两个因素:1) 运算符是一元的(一个参数)还是二元的(两个参数)。2) 运算符被定义为全局函数(对于一元是一个参数,对于二元是两个参数)还是成员函数(对于一元没有参数,对于二元是一个参数—对象变为左侧参数)。这里有一个很小的类来显示运算符重载语法。
假设你对 Delphi 新语法中的运算符重载也有兴趣,可以参考这篇Delphi 新语法介绍之运算符重载。想要了解更多复数运算中的运算符重载实现,可以阅读这篇复数运算符重载。
你会发现运算符重载不仅是一个有趣的语法糖,更是一个让代码更优雅、更易读的强大工具。你不禁会感叹,编程世界里的这些“玩具”真是让人欲罢不能!