#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);
}