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

Posted

技术标签:

【中文标题】默认类构造函数 C++ 遇到问题【英文标题】:Having trouble with default class constructor C++ 【发布时间】:2014-09-11 23:19:15 【问题描述】:

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

如果这个问题看起来很明显,我深表歉意,但我是 C++ 的新手,我读过的关于这个主题的教科书资源不清楚。另外,我想我可能会想太多,让自己感到困惑。任何帮助将不胜感激!谢谢!

【问题讨论】:

如果多项式为零度,则系数数组中的值无关紧要,因为多项式没有项,因此无论输入是什么,它都会产生零。不过,将数组初始化为零可能仍然是一个好主意,并且被认为是好的做法 @wakjah "degree 0" 多项式有 1 个系数。 “度”是x目前的最高幂; f(x) = 6 是 0 次多项式的示例 【参考方案1】:

我确实相信您对问题的思考过度了。正如 coeff[0] = 10 的多项式是“x = 10”,coeff[0] = 0 的多项式是“x = 0”,假设数组的其余部分初始化为零。

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

【讨论】:

【参考方案2】:

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

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

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

std::vector<double> coefficients;

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

coefficients(1, 0.0)

意味着将其初始化为具有值0.01 成员。然后你可以通过coefficients.size() - 1找到多项式的次数。

【讨论】:

【参考方案3】:

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

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)); // 这会用零填充数组内存空间的每个字节。

在功能上它们产生相同的东西。

【讨论】:

以上是关于默认类构造函数 C++ 遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 C++ 基类构造函数?

C++ 类对象复制构造函数和 operator=

运行时在构造函数中初始化向量类成员——C++

C++ STM32用户定义类构造函数问题

C++ 未定义的抽象类构造函数

[C++潜心修炼]类与对象:构造与析构与拷贝构造