1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
//Листинг #0 Основа к статье #include <cstring> #include <iostream> class MyArray{ unsigned m_row, m_col; //используемые значения unsigned row_capacity, col_capacity; //значения по факту int** arr; public: MyArray(); //прототип конструктора по умолчанию MyArray(const unsigned, const unsigned); //прототип конструктора с параметрами для установки значений массиву ~MyArray(); //прототип деструктооа для очистки памяти int& operator()(const int, const int); //прототип метода перегрузки () }; /* РЕАЛИЗАЦИЯ КОНСТРУКТОРА ПО УМОЛЧАНИЮ */ MyArray::MyArray():m_row(0),m_col(0),row_capacity(1), col_capacity(1){ arr = new int * [row_capacity]; for (unsigned i=0; i<row_capacity; i++){ arr[i] = new int[col_capacity]; } } /* РЕАЛИЗАЦИЯ КОНСТРУКТОРА С ПАРАМЕТРАМИ */ MyArray::MyArray(const unsigned row_, const unsigned col_):m_row(row_),m_col(col_){ if (!m_row) row_capacity = 1; else row_capacity = m_row * 2; //выделяем больше чем используем if (!m_col) col_capacity = 1; else col_capacity = m_col; //выделяем больше чем используем arr = new int * [row_capacity]; for (unsigned i=0; i<row_capacity; i++){ arr[i] = new int[col_capacity]; } } /* РЕАЛИЗАЦИЯ ДЕСТРУКТОРА */ MyArray:: ~MyArray(){ for (unsigned i=0; i<row_capacity; i++){ delete []arr[i]; } delete []arr; } int& MyArray::operator()(const int row_, const int col_){ return arr[row_][col_]; } int main(){ MyArray arr(5,10); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
//Листинг #2 Пример создания массивоподобного объекта с помощью перегрузки операции () clang #include <cstring> #include <iostream> class MyArray{ unsigned m_row, m_col; //используемые значения unsigned row_capacity, col_capacity; //значения по факту int** arr; public: MyArray(); //прототип конструктора по умолчанию MyArray(const unsigned, const unsigned); //прототип конструктора с параметрами для установки значений массиву ~MyArray(); //прототип деструктооа для очистки памяти int& operator()(const int, const int); //прототип метода перегрузки () }; /* РЕАЛИЗАЦИЯ КОНСТРУКТОРА ПО УМОЛЧАНИЮ */ MyArray::MyArray():m_row(0),m_col(0),row_capacity(1), col_capacity(1){ arr = new int * [row_capacity]; for (unsigned i=0; i<row_capacity; i++){ arr[i] = new int[col_capacity]; } } /* РЕАЛИЗАЦИЯ КОНСТРУКТОРА С ПАРАМЕТРАМИ */ MyArray::MyArray(const unsigned row_, const unsigned col_):m_row(row_),m_col(col_){ if (!m_row) row_capacity = 1; else row_capacity = m_row * 2; //выделяем больше чем используем if (!m_col) col_capacity = 1; else col_capacity = m_col; //выделяем больше чем используем arr = new int * [row_capacity]; for (unsigned i=0; i<row_capacity; i++){ arr[i] = new int[col_capacity]; } } /* РЕАЛИЗАЦИЯ ДЕСТРУКТОРА */ MyArray:: ~MyArray(){ for (unsigned i=0; i<row_capacity; i++){ delete []arr[i]; } delete []arr; } int& MyArray::operator()(const int row_, const int col_){ return arr[row_][col_]; } int main(){ MyArray arr(5,10); unsigned count = 0; for (unsigned i=0; i<arr.col(); i++){ for (unsigned j=0; j<arr.col(); j++){ arr(i, j) = count++; //заполняем массивоподобный объект значениями по порядку } } /*ВЫВОДИМ ЗНАЧЕНИЯ НА ЭКРАН*/ for (unsigned i=0; i<arr.col(); i++){ for (unsigned j=0; j<arr.col(); j++){ cout << arr(i, j) << '\t'; } cout << '\n'; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
//Листинг #3 Пример создания массиводобного объекта. Имитация двумерного масива с помощью перегрузки () clang #include <cstring> #include <iostream> using std::cout; class MyArray{ unsigned m_row, m_col; //используемые значения unsigned row_capacity, col_capacity; //значения по факту int** arr; public: MyArray(); //прототип конструктора по умолчанию MyArray(const unsigned, const unsigned); //прототип конструктора с параметрами для установки значений массиву ~MyArray(); //прототип деструктооа для очистки памяти int& operator()(const unsigned, const unsigned); //прототип метода перегрузки () int& operator()(const unsigned row_, const unsigned col_) const; //прототип перегрузки () для константного объекта unsigned col() const { return m_col; } //прототипы распознования количеств unsigned row() const { return m_row; } }; /* РЕАЛИЗАЦИЯ КОНСТРУКТОРА ПО УМОЛЧАНИЮ */ MyArray::MyArray():m_row(0),m_col(0),row_capacity(1), col_capacity(1){ arr = new int * [row_capacity]; for (unsigned i=0; i<row_capacity; i++){ arr[i] = new int[col_capacity]; } } /* РЕАЛИЗАЦИЯ КОНСТРУКТОРА С ПАРАМЕТРАМИ */ MyArray::MyArray(const unsigned row_, const unsigned col_):m_row(row_),m_col(col_){ if (!m_row) row_capacity = 1; else row_capacity = m_row * 2; //выделяем больше чем используем if (!m_col) col_capacity = 1; else col_capacity = m_col; //выделяем больше чем используем arr = new int * [row_capacity]; for (unsigned i=0; i<row_capacity; i++){ arr[i] = new int[col_capacity]; } } /* РЕАЛИЗАЦИЯ ДЕСТРУКТОРА */ MyArray:: ~MyArray(){ for (unsigned i=0; i<row_capacity; i++){ delete []arr[i]; } delete []arr; } /* РЕАЛИЗАЦИЯ ПЕРЕГРУЗОК () */ int& MyArray::operator()(const unsigned row_, const unsigned col_){ return arr[row_][col_]; } const int& MyArray::operator()(const unsigned row_, const unsigned col_) const { return arr[row_][col_]; } /* ФУНКЦИЯ ЗАПОЛНЕНИЯ */ void fill_array(MyArray& arr, int count = 0){ for (unsigned i=0; i<arr.col(); i++){ for (unsigned j=0; j<arr.col(); j++){ arr(i, j) = count++; //заполняем массивоподобный объект значениями по порядку } } } /* ФУНКЦИЯ ВЫВОДА */ void show_array(const MyArray& arr){ /*ВЫВОДИМ ЗНАЧЕНИЯ НА ЭКРАН*/ for (unsigned i=0; i<arr.col(); i++){ for (unsigned j=0; j<arr.col(); j++){ cout << arr(i, j) << '\t'; } cout << '\n'; } } int main(){ MyArray arr(5,10); //создали массив в 5 строк и 10 колонок fill_array(arr,10); //заполняем массив значениями по порядку, начинаем с 10 show_array(arr); //показываем массив на экране } |
Добавить комментарий