【问题标题】:How do I fill an array in c++ using a class?如何使用类填充 C++ 中的数组?
【发布时间】: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 填充数组,我对这个问题感到困惑,它使现在更有意义了。感谢您的反馈和帮助,因为我是新来的。谢谢!

标签: c++ arrays class


【解决方案1】:

在采用 int 的构造函数的数字标题中使用函数 std::iota

MyArray::MyArray(int size) {
    n = size;
    a = new double[size];
    std::iota(a, a+size, 0.0);
}

【讨论】:

    【解决方案2】:

    你调用了错误的构造函数 你需要调用这个: MyArray(int size, double def_val) 不是这个: MyArray(int size);

    像这样:

        int main(){
    MyArray a(5,5);
    a.display();
    
         }
    

    你会得到输出为 0,1,2,3,4 但我不认为这是作业要你做的 正如你所说,它应该“通过指定数组的大小来构造函数,以及数组中所有元素的默认值”

    所以我认为你应该修改你的构造函数是这样的:

       MyArray::MyArray(int size, double def_val) {           
        n = size;
        a = new double[size];
        for (int i = 0; i < size; ++i) {
            a[i] = def_val;
        }
       }
    

    【讨论】:

    • 我也很抱歉我的英语不好
    【解决方案3】:
    MyArray::MyArray(const MyArray & a2) {
        n = a2.n;
        for (int i = 0; i < n; i++) {
            a[i] = a2.a[i];
        }
    } //constructor by copy
    

    n

    【讨论】:

    • MyArray(const MyArray &amp; a2) { n = a2.n; a = new double [n]; for (int i=0; i&lt; n; i++){ a[i]=a2.a[i]; } } 喜欢这个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2016-02-14
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多