Answer the question
In order to leave comments, you need to log in
How to change the values of variables of another class in C++?
In general, the task is as follows, there are 2 classes: the array class and the matrix class. The array class is a class whose field is a one-dimensional array, and the matrix class is a class whose field is a one-dimensional array of array objects. thus, in the matrix class, our field will be a two-dimensional array. I have a problem that I cannot change the values of the elements of a two-dimensional array in the matrix class. Here is the source code:
#include <iostream>
#include <time.h>
#include <iomanip>
using namespace std;
class matrica;
class massiv
{
public:
int x[5];
massiv(){
for (int i = 0; i < 5; i++){
x[i] = rand() % 21 - 10;
cout << setw(4) << x[i];
}
cout << endl;
}
int operator [](int i)
{
return x[i];
}
friend matrica;
};
class matrica
{
public:
massiv y[5];
matrica(){
cout << y[0][0];//все прекрасно выводится
/*но если попробовать сделать y[0][0]+=1; то выводится ошибка "выражение должно быть допустимым для изменения левосторонним значением"*/
}
int operator [](int i)
{
return y[i][0]; /*совершенно непонятно, какую роль здесь играет [0], и почему не работает с просто return y[i]... при изменении [0] на любое другое число, результат не меняется...*/
}
};
void main(){
srand(time(NULL));
matrica example;
system("pause");
}
Answer the question
In order to leave comments, you need to log in
First :
If you write in C++ and use C header files, it's common to call them ctime
, not time.h
Second :
For pseudo-random numbers in C++, use the random header file :
#include <random>
...
std::random_device rd;
std::cout << rd() % 10;
void fill_with_random(int* arr, size_t n)
{
random_device rand;
for (size_t i = 0; i < n; ++i)
{
arr[i] = rand() % 21 - 10;
}
}
cout << y[0][0]; //все прекрасно выводится
/*но если попробовать сделать y[0][0]+=1; то выводится ошибка "выражение должно быть допустимым для изменения левосторонним значением"*/
int operator [](int i)
{
return x[i];
}
int& operator [](int i)
{
return x[i];
}
int operator [](int i)
{
return y[i][0]; /*совершенно непонятно, какую роль здесь играет [0], и почему не работает с просто return y[i]... при изменении [0] на любое другое число, результат не меняется...*/
}
massiv& operator [](int i)
{
return y[i];
}
class Matrix
{
public:
Matrix() {}
int* operator[] (size_t i)
{
return &arr[i][0]; // Указатель на первый элемент i-ой строки.
}
private:
int arr[5][5];
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question