use*_*057 0 c++ constructor complex-numbers
我刚刚开始(有点)理解构造函数的概念,在其中给出的练习中,我被要求定义一个Complex成员为r和的类phi。
我对构造函数的理解:它们只是将成员初始化为预定的值,这样,如果我要Complex在main函数中包含类型的对象,而没有给member赋值phi,那么构造函数将简单地为其赋值在构造函数中设置。按照我自己的构造函数定义,我对以下事实感到困惑:在解决方案中,它指出:
class Complex {
private:
double r,phi;
public:
Complex(double Re=0, double Im=0):
r(sqrt(Re*Re+Im*Im)), phi(atan2(Im,Re)) {}
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么将构造函数设置为:
Complex(double Re=0, double Im=0):
r(sqrt(Re*Re+Im*Im)), phi(atan2(Im,Re)) {}
由于构造函数的目的仅仅是将main函数中提到的对象的“缺失”成员设置为预定值,因此肯定r(sqrt(Re*Re+Im*Im))且phi(atan2(Im,Re))过多,并且所需要做的就是r(Re)并且phi(Im)因为它将仍然设置r并phi等于0。
我以为我错了,而构造函数实际上所做的不仅仅是将主函数中提到的对象的“缺失”成员设置为预定值。任何帮助是极大的赞赏。
肯定
r(sqrt(Re*Re+Im*Im))并且phi(atan2(Im,Re))是多余的,而所需要做的只是r(Re)并且phi(Im)因为它仍将设置r并phi等于0。
那是一个错误的结论。
给定构造函数的声明后,您可以使用以下方法构造类的对象:
Complex c1; // Equivalent to Complex c1(0, 0);
Complex c2(1.0); // Equivalent to Complex c2(1.0, 0);
Complex c3(1.0, 1.0);
Run Code Online (Sandbox Code Playgroud)
对于前两种情况,使用r(Re)和phi(Im)可以,但仅出于巧合。
对于第三种情况,使用r(Re)和phi(Im)是不正确的。r并将phi初始化为错误的值。
在所有情况下均可使用r(sqrt(Re*Re+Im*Im))和phi(atan2(Im,Re))工作。