#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];
}
для использования с объектами, доступными только для чтения. Очевидно, что это не работает как установщик.
Если вы не можете использовать этот подход, вы все равно можете воспользоваться базовой идеей и передать координаты, которые вы хотите получить или задать в качестве параметров.