при нажатии кнопки
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
const int row = Convert::ToInt32(textBox1->Text);
const int col = Convert::ToInt32(textBox2->Text);
int** A;
A = new int* [row];
for (int i = 0; i < row; i++) {
A[i] = new int[col];
}
Matrix matrix(row, col);
if (comboBox1->Text == "Заполнить матрицу") {
A=matrix.completion(); // заполянется большими. отриц числами
MessageBox::Show("ГОТОВО!");
}
if (comboBox1->Text == "Вывести матрицу") {
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
label3->Text = label3->Text + A[i][j] + " ";
if (j == col - 1) label3->Text = label3->Text + "\n";
}
}
label3->Visible = true;
}
}
сама функция в классе
class Matrix {
private:
int** matrix;
int col, row;
public:
Matrix(const int row, const int col) { // инициализация объекта
this->row = row;
this->col = col;
matrix = new int* [row];
for (int i = 0; i < row; i++) {
this->matrix[i] = new int[col];
}
}
~Matrix() { //декструктор
for (int i = 0; i < this->row; i++) {
delete[] this->matrix[i];
}
delete[] this->matrix;
}
int** completion() { // заполнение матрицы
srand(time(NULL));
for (int i = 0; i < this->row; i++) {
for (int j = 0; j < this->col; j++) {
this->matrix[i][ j] = rand() % 100 + 1;
}
}
return matrix;
}
};
C/C++
Из метода класса не получается вернуть массив
Может такой вариант подойдёт?
#include <iostream>
#include <iomanip>
using namespace std;
class Matrix {
public:
Matrix() : row(0), col(0), matrix(nullptr) {}
Matrix(const size_t rows, const size_t cols)
: row(rows), col(cols), matrix(new int*[rows]) {
for (size_t i = 0; i < rows; ++i) {
matrix[i] = new int[cols];
}
}
Matrix(const Matrix& mx)
: row(mx.row), col(mx.col), matrix(new int* [row]) {
for (size_t i = 0; i < row; ++i) {
matrix[i] = new int[col];
matrix[i] = mx.matrix[i];
}
}
Matrix& operator=(const Matrix& mx) {
if (&mx != this) {
row = mx.row;
col = mx.col;
for (size_t i = 0; i < row; ++i) {
matrix[i] = mx.matrix[i];
}
}
return *this;
}
~Matrix() {
if (matrix != nullptr) {
for (size_t i = 0; i < row; ++i) {
delete[] matrix[i];
}
delete[] matrix;
matrix = nullptr;
}
}
int*& operator[](const int i)const {
return matrix[i];
}
size_t rows()const {
return row;
}
size_t columns()const {
return col;
}
void show(const streamsize w)const {
for (auto i = 0U; i < row; ++i) {
for (auto j = 0U; j < col; ++j) {
cout << setw(w) << matrix[i][j];
}
puts("");
}
puts("");
}
private:
size_t row, col;
int** matrix;
};
int main() {
Matrix matrix(2, 3);
int n = 0;
for (auto i = 0U; i < matrix.rows(); ++i) {
for (auto j = 0U; j < matrix.columns(); ++j) {
matrix[i][j] = ++n;
}
}
matrix.show(3U);
system("pause > nul");
}
#include <iostream>
#include <iomanip>
using namespace std;
class Matrix {
public:
Matrix() : row(0), col(0), matrix(nullptr) {}
Matrix(const size_t rows, const size_t cols)
: row(rows), col(cols), matrix(new int*[rows]) {
for (size_t i = 0; i < rows; ++i) {
matrix[i] = new int[cols];
}
}
Matrix(const Matrix& mx)
: row(mx.row), col(mx.col), matrix(new int* [row]) {
for (size_t i = 0; i < row; ++i) {
matrix[i] = new int[col];
matrix[i] = mx.matrix[i];
}
}
Matrix& operator=(const Matrix& mx) {
if (&mx != this) {
row = mx.row;
col = mx.col;
for (size_t i = 0; i < row; ++i) {
matrix[i] = mx.matrix[i];
}
}
return *this;
}
~Matrix() {
if (matrix != nullptr) {
for (size_t i = 0; i < row; ++i) {
delete[] matrix[i];
}
delete[] matrix;
matrix = nullptr;
}
}
int*& operator[](const int i)const {
return matrix[i];
}
size_t rows()const {
return row;
}
size_t columns()const {
return col;
}
void show(const streamsize w)const {
for (auto i = 0U; i < row; ++i) {
for (auto j = 0U; j < col; ++j) {
cout << setw(w) << matrix[i][j];
}
puts("");
}
puts("");
}
private:
size_t row, col;
int** matrix;
};
int main() {
Matrix matrix(2, 3);
int n = 0;
for (auto i = 0U; i < matrix.rows(); ++i) {
for (auto j = 0U; j < matrix.columns(); ++j) {
matrix[i][j] = ++n;
}
}
matrix.show(3U);
system("pause > nul");
}
Ебстественно не вернёшь,
массив приватный.
А должен быть по идее
или глобальный, или публичный.
массив приватный.
А должен быть по идее
или глобальный, или публичный.
Юрий Троцкий
так методы которые в паблик его видят, а я ими пользуюсь
Вы уверены, что проблема в этом? В самом классе я не вижу проблему. В строке
label3->Text = label3->Text + A[i][j] + " ";
Вы складываете переменную A[i][j] целочисленного типа со строкой " ", вам надо преобразовывать A[i][j] в строку, например std::to_string(A[i][j]). Кроме того, Вы выделяете память под массив A, и в некоторых случаях приравниваете указатель **A к указателю на массив внутри класс A=matrix.completion(). Каждый раз когда Вы так делаете, Вы теряете адресс выделенной памяти под A, и происходит утечка памяти. Чтобы это исправить, просто уберите кусок
A = new int* [row];
for (int i = 0; i < row; i++) {
A[i] = new int[col];
}
label3->Text = label3->Text + A[i][j] + " ";
Вы складываете переменную A[i][j] целочисленного типа со строкой " ", вам надо преобразовывать A[i][j] в строку, например std::to_string(A[i][j]). Кроме того, Вы выделяете память под массив A, и в некоторых случаях приравниваете указатель **A к указателю на массив внутри класс A=matrix.completion(). Каждый раз когда Вы так делаете, Вы теряете адресс выделенной памяти под A, и происходит утечка памяти. Чтобы это исправить, просто уберите кусок
A = new int* [row];
for (int i = 0; i < row; i++) {
A[i] = new int[col];
}
Юрий Троцкий
Даже если не конвертировать в строку, в label выводиться число в виде строки
Похожие вопросы
- Передача в метод класса указателя на функцию C++
- Проблемы с сортировкой массива методом пузырька.
- Сортировка элементов массива методом Шелла
- Описать независимые классы и определить их методы.
- Выполните сортировку массивов ТРЕМЯ СПОСОБАМИ: методом пузырька, прямого поиска и быстрой сортировкой. С++
- Выполните сортировку массивов ТРЕМЯ СПОСОБАМИ: методом пузырька, прямого поиска и быстрой сортировкой. С++
- Доработка класса. Создание массива объектов
- Заменить нулями элементы массива, которые расположены между первым минимальным и последним максимальным элементами масси
- Динамические массивы объектов класса. Нужна помощь.
- Помогите исправить и дописать программу с массивами на языке C++. Буду благодарен, т. к. самому уже не понятно.
System::String^ str;
if (comboBox1->Text == "Вывести матрицу") {
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
s = std::to_string(A[i][i]);
str = gcnew System::String(s.c_str());
label3->Text = label3->Text + str + " ";
if (j == col - 1) label3->Text = label3->Text + "\n";
}
}
label3->Visible = true;
}