《C++程序设计语言》61页complex类operator+=后接=符号的含义疑问
问题解答
你对这个函数名的理解存在偏差,核心原因是没搞清楚C++运算符重载的命名规则,以及复合赋值运算符的性质:
- C++中重载运算符的函数名规则为:
operator关键字后直接拼接要重载的完整运算符。 +=是C++内置的独立复合赋值运算符,不是+和=的简单拼接,所以重载+=运算符的函数名就是完整的operator+=,不存在“函数名后面额外加等号”的情况。
对应你给出的代码示例,complex& operator+=(complex z)的含义完全符合你已知的函数声明规则:
- 返回类型:
complex&(返回当前对象的引用,符合+=运算支持链式调用的语义,比如a += b += c) - 函数名:
operator+=(重载+=运算符的固定命名) - 参数:
complex z(右操作数,即要加到当前对象上的复数) - 函数体:实现
+=的运算逻辑,把参数z的实部、虚部分别加到当前对象的实部、虚部上,最后返回当前对象的引用*this。
你可以对比单独重载加号+的函数声明,就能看出二者的区别:
complex operator+(complex z) const
这个函数的函数名才是operator+,功能是返回两个复数相加的新值,不会修改原对象,和+=的修改原对象、返回自身引用的语义完全不同。
你代码里出现的-=、*=、/=也都是独立的复合赋值运算符,重载时的函数名也分别是operator-=、operator*=、operator/=,逻辑完全一致。
内容的提问来源于stack exchange,提问作者o o
相关产品推荐
相关产品推荐

