Перевод кода класса 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; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д