Метод доступа и мутатора c в классе arrray [3][3]

#c

#c

Вопрос:

Я начинающий программист, у меня проблема с задачей. Я должен использовать методы set (), get () для инициализации элементов matrix [3][3], но я должен создать универсальный метод для всех элементов.

Пожалуйста, помогите!

 //mat3.hpp

class mat3 {

public:

    mat3(); //Default constructor, double loop initialize 0.0

    mat3(float v11, float v12, float v13,
        float v21, float v22, float v23,
        float v31, float v32, float v33);//Constructor with arguments

    void print(); //Method printing matrix

private:

    float data[3][3];

};
  

Комментарии:

1. Что вы находите трудным в задаче? Чего ты не понимаешь?

Ответ №1:

Методы получения / установки:

 class mat3
{
    // ...

    void setElement(const unsigned row, const unsigned col, const float value) 
    {
        data[row][col] = value;
    }

    float getElement(const unsigned row, const unsigned col) const
    {
        return data[row][col];
    }

}
  

Было бы неплохо проверить, что индексы строк и столбцов, передаваемые в функции получения / установки, находятся в пределах допустимых значений, вы можете сделать это с помощью assert.

Комментарии:

1. Хотелось бы отметить, что он std::assert активен только при компиляции без NDEBUG , поэтому в рабочей среде (где NDEBUG обычно используется) std::assert это не поможет.

Ответ №2:

Уточните у своего преподавателя, разрешено ли вам переходить на trans-universal и комбинировать установщик и получатель:

 float amp; operator(int row, int column) 
{ 
    return data[row][column]; 
}
  

() Оператор позволяет использовать объект как функцию. Два параметра предоставляют координаты для поиска в массиве. Функция возвращает ссылку на запрошенный элемент массива, чтобы вы могли установить его или получить по своему усмотрению.

Использование

 float x = mymat(1,2); 
  

в качестве средства получения или

 mymat(1,2) = 3.14; 
  

в качестве установщика. В целях отладки вы можете захотеть добавить тесты, чтобы убедиться, что row и column не находятся вне диапазона. Вы также можете захотеть вернуть const версию

 float operator(int row, int column) const
{ 
    return data[row][column]; 
}
  

для использования с объектами, доступными только для чтения. Очевидно, что это не работает как установщик.

Если вы не можете использовать этот подход, вы все равно можете воспользоваться базовой идеей и передать координаты, которые вы хотите получить или задать в качестве параметров.