使用默认类构造函数C ++时遇到问题

时间:2014-09-11 23:19:16

标签: c++ arrays constructor

我在理解C ++中的默认构造函数方法时遇到了一些麻烦,以及如何编写一个方法来满足我的方法需求。我的任务是创建一个可以表示多项式的简单数组,例如a(n)x ^(n)+ a(n-1)x ^(n-1)+ ... + a(0)。它应该是系数阵列,系数a(i)存储在阵列的位置i中。系数是浮点值(可能为负),因此数组应为double类型。它的大小也应该是MAXPOLY(常量变量设置为50),将数组限制为保持多项式,最大程度为MAXPOLY - 1(或49)。
完整的作业说明/说明可在此处找到: Beginner polynomial program in C++
我的问题在于为多项式对象Poly创建默认构造函数。默认类构造函数用于将多项式初始化为常量0,创建一个0度多项式为0的类对象。但是,该赋值还指出,此构造函数的post条件是coeff的所有数组元素[]设置为0.0,这就是我的困惑随之而来的地方。首先应该为0-MAXPOLY初始化整个数组,然后将poly定义为0?或者一个或另一个应该足够吗?我该如何编写构造函数?

如果这个问题看起来很明显,我很抱歉,但我对C ++来说是全新的,我读过的关于这个主题的教科书资源还不清楚。此外,我想我可能会过度思考并使自己感到困惑。任何帮助将不胜感激!谢谢!

3 个答案:

答案 0 :(得分:0)

我确实相信你正在推翻这个问题。正如具有coeff [0] = 10的多项式是“x = 10”,具有coeff [0] = 0的多项式是“x = 0”,假设数组的其余部分被初始化为零。

作为C ++的初学者,请记住数组索引从0到N-1,其中N是数组的大小。

答案 1 :(得分:0)

您应该将系数存储在数组中。您有两个常规选项:

  • 使用固定大小的数组以及数组中有多少元素“正在使用”的计数器
  • 使用可变大小的数组

第二个选项更简单,更有意义,所以你的班级会有一个成员

std::vector<double> coefficients;

并在构造函数初始化列表中,您将拥有:

coefficients(1, 0.0)

表示将其初始化为1成员的值0.0。然后,您可以通过coefficients.size() - 1找到多项式的次数。

答案 2 :(得分:0)

查看链接的问题,您似乎无法选择要使用的表示形式。假设:

class Poly
{...
    // array for holding the coefficients of the poly
    double coeff[MAXPOLY];               
...
}

然后,构造函数需要用零值填充数组,如下所示:

// Class constructor
Poly::Poly ()
{ 
   //ADD YOUR CODE HERE
   for( int i = 0; i < MAXPOLY; i++ ) 
       coeff[i]=0.0;
}

这是最明确的演示,尽管您可以缩短代码以将数组初始化为:

memset(coeff,0,sizeof(coeff)); //这会将数组内存空间的每个字节填充为零。

从功能上来说,他们会产生同样的东西。