Здравствуйте, помогите пожалуйста решить проблему в задаче на C++ У меня вообще ничего не выводится в консоль: (
Создайте класс «Массив», который будет хранить внутри себя массив целых чисел, корректно считываться с клавиатуры, вводиться/выводиться и иметь операцию «переворот».
class Array {
int len; // Длина массива
int* data; // Дин. массив с числами
public:
Array(); // data = nullptr;
~Array();
int length(); // Метод для получения длины массива
void reverse(); // Перевернуть массив задом-наперед
// Операция вывода массива
friend ostream& operator << (ostream&, const Array&);
// Операция ввода массива
friend istream& operator >> (istream&, Array&);
};
С помощью полученного класса считайте массив с клавиатуры, переверните его и выведите наоборот.
Формат входных данных
В первой строке с клавиатуры вводится целое число N (1 ≤ N ≤ 1 000).
Во второй строке через пробел вводятся N целых чисел, не превышающие по модулю 109, — элементы массива.
Формат выходных данных
Выведите перевёрнутый массив в том же формате, в котором он вводится.
входные данные
6
1 7 3 4 2 8
выходные данные
6
8 2 4 3 7 1
Мой код:
#include
using namespace std;
class Array {
int len; // Длина массива
int* data; // Дин. массив с числами
public:
Array(); // data = nullptr;
~Array();
int length() { return len; } // Метод для получения длины массива
void reverse(); // Перевернуть массив задом-наперед
// Операция вывода массива
friend ostream& operator << (ostream&, const Array&);
// Операция ввода массива
friend istream& operator >> (istream&, Array&);
};
Array::Array(){
len=0; data=NULL;
}
Array::~Array(){
delete [] data;
len=0;
}
void Array::reverse(){
for (int i = 0, j = len - 1; i < j; ++i, --j) {
swap(data[i], data[j]);
}
}
ostream& operator<<(ostream& out, const Array& a) {
for (int i = 0; i < a.len; ++i) out << a.data[i] << ' ';
return out;
}
istream& operator >> ( istream& inp, Array& a ) {
for ( int i = 0 ; i < a.len ; ++i )
inp >> a.data[i];
return inp;
}
int main() {
Array arr;
cin >> arr;
arr.reverse();
cout << arr;
return 0;
}
// Взял класс без изменений отсюда: https://otvet.mail.ru/answer/1984064253
// Всё работает! Вы вводить данные пробовали?
#include <iostream>
using namespace std;
class Array {
public:
Array(int len, int val = 0) : len(len), data(new int[len]) {
for (int i = 0; i < len; ++i) data[i] = val;
}
Array(const Array& a) : len(a.len), data(new int[len]) {
for (int i = 0; i < len; ++i) data[i] = a.data[i];
}
~Array() {
if (data != nullptr) {
delete[] data;
data = nullptr;
}
}
int length()const {
return len;
}
void reverse() {
for (int i = 0, j = len - 1; i < j; ++i, --j) {
swap(data[i], data[j]);
}
}
int& operator[](int i) {
while (i >= len) i -= len;
while (i < 0) i += len;
return data[i];
}
private:
int len;
int* data;
friend ostream& operator<<(ostream& out, const Array& a) {
for (int i = 0; i < a.len; ++i) out << a.data[i] << ' ';
return out;
}
friend istream& operator>>(istream& inp, Array& a) {
for (int i = 0; i < a.len; ++i) inp >> a.data[i];
return inp;
}
};
int main() {
int length;
cin >> length;
Array box(length);
cin >> box;
box.reverse();
cout << box.length() << '\n' << box << endl;
system("pause > nul");
}
Странный конструктор: он создаёт пустой массив, даже не выделяя динамическую память.
И нигде в коде память для элементов массива не выделяется.