【发布时间】:2021-11-10 20:10:54
【问题描述】:
这是我在大学 CSCI 课程中使用 C++ 完成的作业的一部分
创建一个类数组,代表一个大小为 n 的数组,具有私有属性:
class Array {private: double * a {}; int n;
- 默认构造函数
- 通过指定数组大小的构造函数
- 构造函数通过指定数组的大小,以及数组中所有元素的默认值
- 复制构造函数
- 析构函数
- 访问器:检索数组的大小
我面临着使用类定义数组的任务,并且该类必须包含每个要点所说的内容。但是,我被困在第 3 点上。我试图用默认值 0 填充数组,a[0],1 为 a1 等,具体取决于用户输入的数组的大小和设置为值 n。在这样做时,我的代码所做的就是为数组中的每个元素分配 0 值。
#include <iostream>
using namespace std;
class MyArray {
private:
double * a {};
int n;
public:
MyArray();
explicit MyArray(int size);
MyArray(int size, double def_val);
MyArray(const MyArray & a2);
~MyArray();
int get_Size() const;
void SetElement(int i, double x);
double GetElement(int i);
void display();
};
MyArray::MyArray(int size) {
n = size;
a = new double[size];
}
MyArray::MyArray() {
a = nullptr;
n = 0;
}
double MyArray::GetElement(int i) {
return a[i];
}
void MyArray::SetElement(int i, double x) {
a[i] = x;
}
MyArray::MyArray(const MyArray & a2) {
n = a2.n;
for (int i = 0; i < n; i++) {
a[i] = a2.a[i];
}
} //constructor by copy
MyArray::~MyArray() {
delete[] a;
}
MyArray::MyArray(int size, double def_val) { //THIS IS WHERE IT SHOULD ASSIGN
n = size;
a = new double[size];
for (int i = 0; i < size; ++i) {
a[i] = i;
}
}
int MyArray::get_Size() const {
return n;
}
void MyArray::display() {
cout << "The values of the array MyArray are: " << endl;
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;
}
int main() {
MyArray a(5);
a.display();
return 0;
}
输出是这样的
数组 MyArray 的值是:
0 0 0 0 0
【问题讨论】:
-
你有多个构造函数。你用的是第一个,它只分配数组,不设置任何值。
-
通常,default 值为零...如果我没看错,您作业中的要点是要求设置 same 初始值对所有元素的价值。
-
您的实际问题是什么?您的代码调用了一个构造函数,将
MyArray的大小填充为 5。结果是一个大小为 5 的内部双精度数组。数组中每个元素的值都是 0。 -
另请注意,您的代码没有调用该特定构造函数。
-
好吧,这样更有意义,我不知道默认值意味着用默认值 0 填充数组,我对这个问题感到困惑,它使现在更有意义了。感谢您的反馈和帮助,因为我是新来的。谢谢!