Как заполнить массив в c с помощью класса?

#c #arrays #class

Вопрос:

Это часть моего задания, которое я получил на курсе CSCI в колледже с использованием C

Создайте массив классов, представляющий arran размера n, с частными свойствами:

class Array {private: double * a {}; int n;

  • Конструктор по умолчанию
  • Конструктор, указав размер массива
  • Конструктор, указав размер массива и значение по умолчанию для всех элементов в массиве
  • Конструктор путем копирования
  • Деструктор
  • Способ доступа: Получение размера массива

Я столкнулся с задачей определения массива с использованием класса, и класс должен содержать то, что говорится в каждом пункте. Тем не менее, я застрял на пункте 3. Я пытаюсь заполнить массив значениями по умолчанию 0 для[0], 1 для 1 и т. Д. В зависимости от размера массива, который вводит пользователь и устанавливает в качестве значения 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 amp; 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 amp; 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

Комментарии:

1. У вас есть несколько конструкторов. Тот, который вы используете, является первым, который только выделяет массив и не устанавливает никаких значений.

2. Обычно значение по умолчанию равно нулю… Если я правильно прочитал, этот пункт в вашем задании требует установить одинаковое начальное значение для всех элементов.

3. Каков ваш реальный вопрос? Ваш код вызывает конструктор, который заполняет MyArray размер до 5. В результате получается внутренний двойной массив размером 5. Значение каждого элемента в массиве равно 0.

4. Пожалуйста, также обратите внимание, что ваш код не вызывает этот конкретный конструктор.

5. Хорошо, так что это имеет гораздо больше смысла, я не знал, что по умолчанию это означает заполнение массива значением по умолчанию, равным 0, меня смутил вопрос, и теперь это имеет гораздо больше смысла. Я ценю обратную связь и помощь, так как я здесь новичок. Спасибо!

Ответ №1:

Вы вызываете неправильный конструктор, вам нужно вызвать этот: 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;
    }
   }
 

Комментарии:

1. также я прошу прощения за мой плохой английский

Ответ №2:

 MyArray::MyArray(const MyArray amp; a2) {
    n = a2.n;
    for (int i = 0; i < n; i  ) {
        a[i] = a2.a[i];
    }
} //constructor by copy
 

произойдет сбой, когда n

Комментарии:

1. MyArray(const MyArray amp; a2) { n = a2.n; a = new double [n]; for (int i=0; i< n; i ){ a[i]=a2.a[i]; } } Вот так?

Ответ №3:

Используйте функцию std::iota в числовом заголовке конструктора, которая принимает значение int:

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