Операция перегрузки не видит динамические массивы, заданные в методе класса
Как передать значение динмачиеских массивов из метода класса в метод перегрузки? Пробовала и глобально объявлять переменные, используемые массивами, ничего не получается :( Нужно, чтобы перегружался оператор индексации
#include <iostream>
using namespace std;
class MainClass
{
public:
int x, y;
int* mass1 = new int[x];
int* mass2 = new int[y];
void Zapolnenie();
void Vzyatie();
int& operator[](int index)
{
return mass1[index];
}
};
void MainClass::Zapolnenie()
{
};
void MainClass::Vzyatie()
{
int vibor;
cout << "Выберите дальнейшее действие:" << endl;
cout << "1. Взять элемент из списка 1" << endl;
cout << "2. Взять элемент из списка 2" << endl;
cout << "3. Взять элемент из обоих списков" << endl;
cin >> vibor;
switch (vibor)
{
case 1:
MainClass vivod;
int a;
cout << "Введите номер элемента, который вам нужен: " << endl;
cin >> a;
cout << vivod[a] << endl;
break;
}
};
int main()
{
setlocale(LC_ALL, "Russian");
MainClass A;
cout << "Введите размер первого списка: ";
cin >> A.x;
cout << "Введите размер второго списка: ";
cin >> A.y;
for (int i = 0; i < A.x; i++)
{
A.mass1[i] = 1 + rand() % 10;
cout << A.mass1[i] << " ";
};
cout << endl;
for (int j = 0; j < A.y; j++)
{
A.mass2[j] = rand();
cout << A.mass2[j] << " ";
};
cout << endl;
A.Vzyatie();
return 0;
}
Ответы (1 шт):
Автор решения: Maggot
→ Ссылка
Ну создали вы новый объект... он же не тот)
MainClass vivod;
int a;
cout << "Введите номер элемента, который вам нужен: " << endl;
cin >> a;
cout << vivod[a] << endl;
далее -
cout << vivod[a] << endl;
может вы хоnели написать это?
cout << this->operator[](a) << endl;
Пару слов:
1) Не используйте голые указатели - для этого есть контейнеры и умные указатели реализующие RAII - link https://en.cppreference.com/w/cpp/language/raii
2) rand() такое себе пдсч - есть - https://en.cppreference.com/w/cpp/numeric/random
пример в функции GenRandInt
Вот пример Вашего кода:
#include <iostream>
#include <memory>
#include <limits>
#include <random>
class MainClass
{
public:
MainClass() : mass1(nullptr), size_m1(0) {}
void create(std::size_t size) {
if (mass1 != nullptr) {
this->mass1.reset();
}
this->mass1 = std::make_unique<int[]>(size);
}
std::unique_ptr<int[]>& get_m1() {
return this->mass1;
}
int& operator[](std::size_t index) {
if (index < this->size_m1) {
throw std::out_of_range("Range error");
}
return this->mass1[index];
}
private:
std::unique_ptr<int[]> mass1;
std::size_t size_m1;
};
int GenRandInt(int low = std::numeric_limits<int>::min(), int high = std::numeric_limits<int>::max()) {
static std::random_device r_dev{};
static std::mt19937_64 mt_engine(r_dev());
static std::uniform_int_distribution<> u_int_d;
u_int_d = std::uniform_int_distribution<>{static_cast<int32_t>(low), static_cast<int32_t>(high)};
return static_cast<int>(u_int_d(mt_engine));
}
int main() {
MainClass mc{};
mc.create(10);
for (std::size_t i{0}; i < 10; ++i) {
mc[i] = GenRandInt();
}
for (std::size_t i{0}; i < 10; ++i) {
std::cout << mc[i] << std::endl;
}
return 0;
}