То был конструктор с параметрами ). Щас весь код кину, для полноты картины
#include <string>
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
#include <array>
#include <ctime>
using namespace std;
void FormMatr(int* X, int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
*(X + i * m + j) = 160 * (float)rand() / RAND_MAX - 80;
}
}
}
void PrintMatr(int* X, int n, int m)
{
cout.width(10);
for (int i = 0; i < n; i++)
{
cout << endl;
for (int j = 0; j < m; j++)
{
cout.width(6);
cout << *(X + i * m + j) << " ";
}
}
}
int GetMax(int* X, int n, int m)
{
int i, j; int max = -500;
cout << "Матрица";
for (i = 0; i < n; i++)
{
cout << "\n";
for (j = 0; j < m; j++)
{
if (max <= *(X + i * m + j))
{
max = *(X + i * m + j);
}
cout << *(X + i * m + j) << "\t";
}
}
cout << endl;
cout << "Наибольшый элемент матрицы:" << max << endl;
cout << endl;
return max;
}
int GetSum(int* X, int n, int m)
{
int i, j; int Sum = 0;
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
Sum += *(X + i * m + j);
}
}
cout << "Сумма матрицы С = " << Sum << endl;
return Sum;
}
void Copy(int* X, int n, int m, int* X1)
{
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++) {
*(X + i * m + j) = *(X1 + i * m + j);
}
}
void move(int* X, int n, int m, int K)
{
for (int i = 0; i < n; i++)
{
for (int t = 0; t < K % m; t++)
{
int buf = *(X + i * m + (n - 1));
for (int j = n - 1; j > 0; --j)
*(X + i * m + j) = *(X + i * m + (j - 1));
*(X + i * m + 0 ) = buf;
}
}
}
class Matr {
private:
int n, m; int* X;
public:
Matr()
{
n = 0; m = 0;
X = nullptr;
}
Matr(int n1, int m1)
{
n = n1; m = m1; X = new int[n * m];
FormMatr(X, n, m);
cout << "Конструктор параметров сработал" << endl;
}
Matr(const Matr& obj)
{
n = obj.n; m = obj.m; X = new int[n * m];
Copy(X, n, m, obj.X);
cout << "Конструктор копии сработал" << endl;
}
~Matr()
{
delete[] X;
cout << "\nСработал деструктор" << endl;
}
int Getn()
{
return n;
}
int Get_m()
{
return m;
}
int Get_X_i_j(int i, int j)
{
return *(X + i * m + j);
}
friend void FormMatr(int*, int, int);
friend void PrintMatr(int*, int, int);
friend int GetMax(int*, int, int);
friend int GetSum(int*, int, int);
friend void Copy(int*, int, int, const int*);
friend void move(int*, int, int, int);
void PrintAll()
{
cout << "Размерность матрицы:" << endl; cout << "n= " << n << " m= " << m << endl; PrintMatr(X, n, m);
}
Matr& operator =(const Matr& obj)
{
if (this == &obj)
return *this;
cout << "Сработал оператор присваивания" << endl;
n = obj.n;
m = obj.m;
delete[] X;
X = new int[n * m];
Copy(X, n, m, obj.X);
return *this;
}
int operator ~()
{
cout << "Операция ~ " << endl;
int Sum = 0;
Sum = GetSum(X, n, m);
return ~Sum;
}
int operator > (Matr& obj)
{
cout << "\nОперация >" << endl;
int Max1, Max2;
int Min_Max;
Max1 = GetMax(this->X, this->n, this->m);
Max2 = GetMax(obj.X, obj.n, obj.m);
if (Max1 < Max2)
{
Min_Max = Max1;
}
else Min_Max = Max2;
return Min_Max;
}
Matr operator >> (int K) const
{
Matr res(*this);
cout << "Операция >> \n" << endl;
move(res.X, res.n, res.m, K);
return res;
}
};
void main()
{
srand(time(NULL));
setlocale(LC_ALL, "Russian");
Matr A(5, 5), B(5, 5), C(5, 5);
Matr A1, A2;
int K;
cout << "Матрица А" << endl;
A.PrintAll();
cout << endl;
cout << "Матрица В" << endl;
B.PrintAll();
cout << endl;
cout << "Матрица С" << endl;
C.PrintAll();
cout << endl;
K = ~C;
cout << "Побитово инвертированное значение суммы матрицы С = " << K << endl << endl;
cout << "Сдвиг матрицы А на К значений " << endl;
if (K > 0)
{
A1 = A >> K;
A1.PrintAll();
}
else { cout << "Сдвиг невозможен, значение K отрицательное" << endl; }
K = A > B;
cout << "Минимальный элемент из двух максимальных элементов матриц = " << K << endl;
cout << "Сдвиг матрицы А1 на К значений\n" << endl;
if (K > 0)
{
A2 = A1 >> K;
A2.PrintAll();
}
else { cout << "Сдвиг невозможен, значение K отрицательное" << endl; }
system("pause");