Перевод кода класса MyArray с C++ на C#
Формулировка задачи:
Кто может перевести это на С#. Заранее благодарен.
#include <iostream>
using namespace std;
class MyArray
{
int *numbers;
int sizeOfArray;
public:
MyArray() //конструктор без параметров
{
sizeOfArray = 0;
numbers = 0;
}
//-----------------------------------------------
MyArray(int size) //конструктор с параметрами
{
sizeOfArray = size;
numbers = new int [sizeOfArray];
for(int i = 0; i < sizeOfArray; i++)
{
numbers[i] = 0;
}
}
//-----------------------------------------------
~MyArray() //деструктор
{
delete [] numbers;
}
//-----------------------------------------------
void showData() //вывод данных массива на экран
{
for(int i = 0; i < sizeOfArray; i++)
{
cout << numbers[i] << " | ";
}
cout << endl << endl;
}
//-----------------------------------------------
// на место вызова [] вернется по ссылке сам объект
int &operator[](int j) //перегрузка []
{
return numbers[j];
}
//-----------------------------------------------
MyArray& operator=( MyArray &arrInt2 ) //перегрузка оператора присваивания
{
delete [] numbers;
sizeOfArray = arrInt2.sizeOfArray;
numbers = new int [sizeOfArray];
for (int i = 0; i < sizeOfArray; i++)
{
numbers[i] = arrInt2.numbers[i];
}
return *this;
}
//-----------------------------------------------
friend bool operator ==( MyArray &arrInt, MyArray &arrInt2 ); //перегрузка ==
};
bool operator == ( MyArray &arrInt, MyArray &arrInt2 )
{
if(arrInt.sizeOfArray != arrInt2.sizeOfArray) //сравниваем размеры массивов объектов
{
cout << "В массивах разное количество элементов\n";
return 0;
}
else //проверяем равны ли данныев в ячейках массивов
{
for (int i = 0; i < arrInt.sizeOfArray; i++)
{
if(arrInt.numbers[i] != arrInt2.numbers[i])
{
cout << "Значения массивов не равны\n";
return 0;
}
}
}
return 1;
}
int main()
{
setlocale(LC_ALL, "rus");
MyArray ArrayInt(5); //создаем объект класса и записываем в него данные
ArrayInt[0] = 1; //перегруженный []
ArrayInt[1] = 2;
ArrayInt[2] = 3;
ArrayInt[3] = 4;
ArrayInt[4] = 5;
cout << "Массив ArrayInt: ";
ArrayInt.showData(); //вывод данных массива на экран
MyArray ArrayInt2(5); //создаем второй объект класса
ArrayInt2[0] = 11; //перегруженный []
ArrayInt2[1] = 22;
ArrayInt2[2] = 33;
ArrayInt2[3] = 44;
ArrayInt2[4] = 55;
cout << "Массив ArrayInt2: ";
ArrayInt2.showData(); //вывод данных массива на экран
if(ArrayInt == ArrayInt2){ //сравнение двух объектов класса (перегруженный ==)
cout << "Массив ArrayInt равен массиву ArrayInt2\n";
}
else {
ArrayInt = ArrayInt2;
}
cout << "Массив ArrayInt после копирования: ";
ArrayInt.showData();
MyArray ArrayInt3(10); // третий объект класса с массивом из 10 элементов
cout << "Массив ArrayInt3: ";
ArrayInt3.showData();
ArrayInt3 = ArrayInt; // копируем массив из ArrayInt в ArrayInt3
cout << "Массив ArrayInt3 после копирования: \n";
ArrayInt3.showData();
return 0;
}Решение задачи: «Перевод кода класса MyArray с C++ на C#»
textual
Листинг программы
using System;
class Program
{
static int Main()
{
MyArray ArrayInt = new MyArray(5); //создаем объект класса и записываем в него данные
ArrayInt[0] = 1; // индексатор, вместо перегруженного []
ArrayInt[1] = 2;
ArrayInt[2] = 3;
ArrayInt[3] = 4;
ArrayInt[4] = 5;
Console.Write("Массив ArrayInt: ");
ArrayInt.showData(); //вывод данных массива на экран
MyArray ArrayInt2 = new MyArray(5);
ArrayInt2[0] = 11; // индексатор, вместо перегруженного []
ArrayInt2[1] = 22;
ArrayInt2[2] = 33;
ArrayInt2[3] = 44;
ArrayInt2[4] = 55;
Console.Write("Массив ArrayInt2: ");
ArrayInt2.showData(); //вывод данных массива на экран
if(ArrayInt == ArrayInt2) //сравнение двух объектов класса (перегруженный ==)
Console.Write("Массив ArrayInt равен массиву ArrayInt2\n");
else
ArrayInt = ArrayInt2;
Console.WriteLine("Массив ArrayInt после копирования: ");
ArrayInt.showData();
MyArray ArrayInt3 = new MyArray(10); // третий объект класса с массивом из 10 элементов
Console.Write("Массив ArrayInt3: ");
ArrayInt3.showData();
ArrayInt3.GetCopy(ArrayInt); // копируем массив из ArrayInt в ArrayInt3
Console.WriteLine("Массив ArrayInt3 после копирования: \n");
ArrayInt3.showData();
Console.ReadKey();
return 0;
}
}
class MyArray
{
public int[] numbers;
public int sizeOfArray;
public MyArray()
{
sizeOfArray = 0;
}
public MyArray(int size)
{
sizeOfArray = size;
numbers = new int[sizeOfArray];
for (int i = 0; i < sizeOfArray; i++)
numbers[i] = 0;
}
public void GetCopy(MyArray arrInt2) // вместо перегрузки = Использование: a.GetCopy(b), вместо a = b (как в С++)
{
sizeOfArray = arrInt2.sizeOfArray;
numbers = new int[sizeOfArray];
for (int i = 0; i < sizeOfArray; i++)
numbers[i] = arrInt2.numbers[i];
}
public void showData()
{
for (int i = 0; i < sizeOfArray; i++)
Console.Write(numbers[i] + " | ");
Console.Write("\n\n");
}
public int this[int j] // вместо перегрузки []
{
set { numbers[j] = value; }
get {
if (j < numbers.Length)
return numbers[j];
return 0;
}
}
public static bool operator==(MyArray arrInt, MyArray arrInt2)
{
if (arrInt.sizeOfArray != arrInt2.sizeOfArray)
{
Console.WriteLine("В массивах разное количество элементов");
return false;
}
else
{
for (int i = 0; i < arrInt.sizeOfArray; i++)
{
if(arrInt.numbers[i] != arrInt2.numbers[i])
{
Console.WriteLine("Значения массивов не равны");
return false;
}
}
}
return true;
}
public static bool operator!=(MyArray arrInt, MyArray arrInt2)
{
if (arrInt.sizeOfArray != arrInt2.sizeOfArray)
return true;
else
{
for (int i = 0; i < arrInt.sizeOfArray; i++)
{
if (arrInt.numbers[i] != arrInt2.numbers[i])
{
Console.WriteLine("Значения массивов не равны");
return true;
}
}
}
return false;
}
}