Как бы я создал две матрицы (все значения Единицы или значения Нули), используя статические функции-члены, которые вызывают один и тот же конструктор?

Таким образом, в основном способ, которым моя программа работает с использованием статической функции-члена для запроса матрицы нулей 2x4, выглядит следующим образом:

Matrix Matrix::Zeros (const int noOfRows, const int noOfCols){
    Matrix outZ(noOfRows, noOfCols);
    return outZ;
} //My static Zeros member function

Это относилось к моему конструктору, который хранит нулевые значения в матрице 2x4 следующим образом:

Matrix::Matrix (const int noOfRows, const int noOfCols){

this->noOfRows = noOfRows;
this->noOfCols = noOfCols;

data = new double[noOfRows*noOfCols];
    for(int i=0; i< noOfRows*noOfCols; i++){
        data[i] = 0;
    }
}

Моя проблема в том, что я хочу вызвать тот же конструктор, чтобы запросить матрицу единиц 2x4, используя следующую статическую функцию-член:

Matrix Matrix::Ones(const int noOfRows, const int noOfCols){
    Matrix outO(noOfRows, noOfCols);
    return outO;
} //My static Ones member function

Это, очевидно, возвращает матрицу 2x4 нулей, а не единиц. Поэтому я пытался найти способ иметь оператор if внутри моего конструктора, чтобы он создавал матрицу нулей или единиц на основе имени объекта, которое я возвращаю в моей статической функции-члене, т.е.

if(outZ){
    for(int i=0; i< noOfRows*noOfCols; i++){
        data[i] = 0;
    }
}

if(outO){
    for(int i=0; i< noOfRows*noOfCols; i++){
        data[i] = 1;
    }
}

Возможно ли это или есть лучшая альтернатива для реализации этого оператора if? (Я ограничен в этом формате, поскольку мне нужно использовать переменную данных, поскольку я использую ее позже во время оператора<< перегрузка)

1 ответ

Решение

Передайте значение в качестве необязательного аргумента.

Декларация:

Matrix (const int noOfRows, const int noOfCols, int value = 0);

Реализация:

Matrix::Matrix (const int noOfRows, const int noOfCols, int value){
   ...
   data[i] = value;
   ...
} 

Изменить реализацию Matrix::Ones использовать 1 как последний параметр.

Matrix Matrix::Ones(const int noOfRows, const int noOfCols){
    Matrix outO(noOfRows, noOfCols, 1);
    return outO;
}

PS Использование const int как тип аргумента не имеет никаких преимуществ. Вы можете сделать свой код проще, просто используя int,

Matrix (int noOfRows, int noOfCols, int value = 0);

То же самое относится и к другим функциям.

Другие вопросы по тегам