ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
另外一个我们需要的操作则是乘法。不像加法那样,乘法在极坐标系中容易,在笛卡尔坐标系中麻烦些(是相对有点麻烦而已)。 在极坐标系,我们只需将模相乘,角度相加。像往常那样,我们使用访问函数来实现而不必关心对象的表现形式。 ~~~ Complex mult (Complex& a, Complex& b) { double mag = a.getMag() * b.getMag() double theta = a.getTheta() + b.getTheta(); Complex product; product.setPolar (mag, theta); return product; } ~~~ 这儿我们遇到一个小问题,即我们没有一个构造函数来接收极坐标系的值。添加这样的一个构造函数也可以,但是要记得只有在参数不同时才能重载一个函数(包括构造函数)。在这个例子中,我们要添加的构造函数仍然是接收两个浮点型的参数,所以没法重载。 另外一个办法是提供一个访问函数来设置变量的值,为使操作正常进行,我们需要确保当mag与theta的值被设定时,极坐标的标志位也要设置为真,同时还要确保笛卡尔坐标系的标志位设置为假。这是因为,如果我们手动设置了极坐标的值,笛卡尔坐标系的值就会失效。 ~~~ void Complex::setPolar (double m, double t) { mag = m; theta = t; cartesian = false; polar = true; } ~~~ 作为练习,请写出对应的函数setCartesian。 为测试mult函数,我们可以这样做: Complex c1 (2.0, 3.0); Complex c2 (3.0, 4.0); Complex product = mult (c1, c2); product.printCartesian(); 该程序的输出结果为: -6 + 17i 在这个输出的背后进行了很多转换。当我们调用mult时,两个参数为被转换为极坐标系的表示形式。结果也是极坐标形式,当我们调用printCartesian时,就会再转换回笛卡尔坐标系的形式。没错,我们就这样得到了正确结果,很奇妙吧。