Неправильно работает инкремент и декремент для моего типа данных, которые я перегрузил - C#
Формулировка задачи:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Matr
{
private double[,] A;
private int size;
private Matr(int size)
{
this.size = size;
this.A = new double[size, size];
}
private Matr()
{
size = 2;
A = new double[size, size];
}
private Matr(Matr a)
{
size = a.size;
A = a.A;
}
private void read()
{
Console.WriteLine("Введите "+Math.Pow(size,2)+" элемента(ов)");
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
A[i,j]=Convert.ToDouble(Console.ReadLine());
}
}
}
public void Transp()
{
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
double b = A[i, j];
A[i, j] = A[j, i];
A[j, i] = b;
}
}
}
private void Write()
{
for (int i = 0; i < size; i++)
{
Console.WriteLine();
for (int j = 0; j < size; j++)
{
Console.Write("{0,8}",A[i, j]);
}
}
Console.ReadLine();
}
public static Matr operator +(Matr m1, double t)
{ for (int i = 0; i < m1.size; i++)
{
for (int j = 0; j < m1.size; j++)
{
m1.A[i, j] += t;
}
}
return (m1);
}
public static Matr operator -(Matr m1, double t)
{
for (int i = 0; i < m1.size; i++)
{
for (int j = 0; j < m1.size; j++)
{
m1.A[i, j] -= t;
}
}
return m1;
}
public static Matr operator *(Matr m1, Matr m2)
{
if (m1.size != m2.size)
{
throw new System.ArgumentException("Не совпадают размерности матриц");
}
Matr m3 = new Matr(m1.size);
for (int i = 0; i < m1.size; i++)
{
for (int j = 0; j < m1.size; j++)
{
for (int u = 0; u < m1.size; u++)
{
m3.A[i, j] += m1.A[i, u] * m2.A[u, j];
}
}
}
return m3;
}
public static Matr operator *(Matr m1, double t)
{
Matr m2 = new Matr(m1.size);
Matr m3 = new Matr(m1.size);
for (int i = 0; i < m2.size; i++)
{
for (int j = 0; j < m2.size; j++)
{
m2.A[i, j] = t;
}
}
return m1 = m1 * m2;
}
public static Matr operator /(Matr m1, double t)
{
Matr m2 = new Matr();
for (int i = 0; i < m1.size; i++)
{
for (int j = 0; j < m1.size; j++)
{
m2.A[i, j] =t;
}
}
m1 = m1/ m2;
return m1;
}
public static Matr operator +(Matr m1, Matr m2)
{
for (int i = 0; i < m1.size; i++)
{
for (int j = 0; j < m1.size; j++)
{
m1.A[i, j] += m2.A[i, j];
}
}
return (m1);
}
public static Matr operator -(Matr m1, Matr m2)
{
for (int i = 0; i < m1.size; i++)
{
for (int j = 0; j < m1.size; j++)
{
m1.A[i, j] -= m2.A[i, j];
}
}
return m1;
}
public static Matr operator /(Matr m1, Matr m2)
{
if (m1.size != m2.size)
{
throw new System.ArgumentException("Не совпадают размерности матриц");
}
Matr m3 = new Matr(m1.size);
m1.Transp();
m3 = m1 * m2;
return m3;
}
public static Matr operator ++(Matr m1)
{
return m1+1;
}
public static Matr operator --(Matr m1)
{
return m1-1;
}
static void Main(string[] args)
{
Console.WriteLine("Введите размер матрицы:");
int b = Convert.ToInt32(Console.ReadLine());
Matr m1= new Matr(b);
Matr m = new Matr(b);
m1.read();
Console.WriteLine("Операция сложения: введите число");
double k = Convert.ToInt32(Console.ReadLine());
m = m1+k;
m.Write();
Console.WriteLine("Операция сложения: введите матрицу");
Matr m2 = new Matr(b);
m2.read();
m = m + m2;
m.Write();
Console.WriteLine("Операция вычитания: введите число");
k = Convert.ToDouble(Console.ReadLine());
m = m - k;
m.Write();
Console.WriteLine("Операция вычитания: введите матрицу");
m2.read();
m = m - m2;
m.Write();
Console.WriteLine("Операция умножения: введите число");
k = Convert.ToDouble(Console.ReadLine());
m = m * k;
m.Write();
Console.WriteLine("Операция умножения: введите размер матрицы");
b = Convert.ToInt32(Console.ReadLine());
m2 = new Matr(b);
m2.read();
m = m * m2;
m.Write();
Console.WriteLine("Операция деления: введите число");
k = Convert.ToInt32(Console.ReadLine());
m = m / k;
m.Write();
Console.WriteLine("Операция деления: введите размер матрицы");
b = Convert.ToInt32(Console.ReadLine());
m2 = new Matr(b);
m2.read();
m = m / m2;
m.Write();
Console.WriteLine("Операция m++:введите размер матрицы");
b = Convert.ToInt32(Console.ReadLine());
m = new Matr(b);
m.read();
Console.WriteLine("Дана");
m.Write();
m1 = (m++);
Console.WriteLine("Ответ");
m1.Write();
Console.WriteLine("Операция ++m:введите размер матрицы");
b = Convert.ToInt32(Console.ReadLine());
m = new Matr(b);
m.read();
Console.WriteLine("Дана");
m.Write();
m1 =++m;
Console.WriteLine("Ответ");
m1.Write();
Console.WriteLine("Операция --m:введите размер матрицы");
b = Convert.ToInt32(Console.ReadLine());
m = new Matr(b);
m.read();
m1 = m--;
m1.Write();
Console.WriteLine("Операция m--:введите размер матрицы");
b = Convert.ToInt32(Console.ReadLine());
m = new Matr(b);
m.read();
m1 = --m;
m1.Write();
}
}
}Решение задачи: «Неправильно работает инкремент и декремент для моего типа данных, которые я перегрузил»
textual
Листинг программы
Matrix m1=new Matrix();//создаем новый объект m1=m++;//увиличиваем данную матрицу постфиксной формой и записываем в m1 m1.write();//выводим m1 m1=++m//увеличиваем m матрицу префиксной формой и записываем в m1 m1.write();