用C++编写Prototype构造函数

Zac*_*ith 5 c++ constructor initialization-list

我正在二次表达式,其中y=ax^2 + bx + ca,b,c是常数,x是一个变量.这是我的班级:

class quadratic {
public:
double evaluate(const double x);
void getCoefficients (double &A, double &B, double &C);
void setCoefficients (const double A, const double B, const double C);

private:
double a;
double b;
double c;
};
Run Code Online (Sandbox Code Playgroud)

我将为该类创建两个构造函数,以便以下是合法的

quadratic y1 = quadratic(1.0, -5.0, 7.0);
quadratic y2 = quadratic(-3.0, -2.0, 10.0);
quadratic y3;
Run Code Online (Sandbox Code Playgroud)

默认构造函数应设置为零,而第二个构造函数中的参数指示系数的初始值.

以下是我认为我应该这样做的方式:

quadratic()   //default values
{
double A, double B, double C = 0.0;
}

quadratic(double A, double B, double C)   //initial values
{
double A = double a;
double B = double b;
double C = double c;
}
Run Code Online (Sandbox Code Playgroud)

但是我并没有完全理解如何设置它,并希望任何大师帮助解决这个问题.

Bri*_*ndy 20

您可能应该使用构造函数的初始化列表:

quadratic() : a(0), b(0), c(0)
{
}

quadratic(double A, double B, double C) : a(A), b(B), c(C)
{
}
Run Code Online (Sandbox Code Playgroud)

上面使用C++语言的一部分来初始化称为初始化列表的成员变量.


你为参数构造函数做了什么:

double A = double a;
double B = double b;
double C = double c;
Run Code Online (Sandbox Code Playgroud)

首先不会编译,但即使你简化你所做的事情:

double A = a;
double B = b;
double C = c;
Run Code Online (Sandbox Code Playgroud)

然后它仍然不会编译,因为已经定义了A,B和C. 当您输入类型名称后跟变量名称时,它将尝试创建一个新变量.

所以,如果我们再次简化为:

A = a;
B = b;
C = c;
Run Code Online (Sandbox Code Playgroud)

然后这仍然是错误的,但至少它会编译.这是错误的,因为您将参数设置为未初始化的类变量的值.

相反,你想要:

a = A;
b = B;
c = C;
Run Code Online (Sandbox Code Playgroud)

你为没有参数的构造函数做了什么:

 double A, double B, double C = 0.0;
Run Code Online (Sandbox Code Playgroud)

这不会编译.在一行中声明许多变量的正确语法如下:

 double A = 0, B = 0, C = 0;
Run Code Online (Sandbox Code Playgroud)

但这仍然不正确,它只会创建3个新变量A,B和C并将它们初始化为0.您真正想要的是设置成员变量a,b和c.

所以你要:

a = b = c = 0;

  • +1优秀的帮助和整理出来的混淆与声明. (4认同)