Re: [问题] 关于运算子重载(operator overloading)

楼主: Feis (永远睡不着 @@)   2015-05-25 08:35:01
推 wtchen: 所以若我要让交换律成立,我得写两个非成员函式? 05/25 02:08
→ wtchen: const complex operator*(double a, BigNumber& b) 05/25 02:09
→ wtchen: 和const complex operator*(BigNumber& b, double a) ? 05/25 02:09
诚如原文所述,这个情况我个人想法是看 operator* 会否存取到 BigNumber 的私有成
员。如果不会的话,我会选非成员函式。如果会的话,因为这里符合交换律我会选加
friend 的非成员函式。
所以无论如何我都会选用非成员函式的型式。
因此确实需要定义两个函式 BigNumber operator*(double lhs, BigNumber rhs) 及
BigNumber operator*(BigNumber lhs, double rhs) [注1]
但是其中之一的实作可以由另外一个达成,例如我们已经实作好前者, 则后者可以这样
实作:
BigNumber operator*(BigNumber lhs, double rhs) {
return rhs * lhs;
}
当然有另一种选择是使用隐性转型将 double 转为 BigNumber 来解决交换律的问题。
但是因为违反我避免使用隐性转型的原则所以我的想法是不倾向这样的作法。
[注1] 这里的 signature 因为 C++ 版本不同有不同适当的写法。
作者: wtchen (没有存在感的人)   2014-05-25 02:08:00
所以若我要让交换律成立,我得写两个非成员函式?const complex operator*(double a, BigNumber& b)和const complex operator*(BigNumber& b, double a) ?感谢,受教了!

Links booklink

Contact Us: admin [ a t ] ucptt.com