Таким образом, в основном способ, которым моя программа работает с использованием статической функции-члена для запроса матрицы нулей 2×4, выглядит следующим образом:
Matrix Matrix::Zeros (const int noOfRows, const int noOfCols){
Matrix outZ(noOfRows, noOfCols);
return outZ;
} //My static Zeros member function
Это относится к моему конструктору, который хранит нулевые значения в матрице 2×4 следующим образом:
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;
}
}
Моя проблема в том, что я хочу вызвать тот же конструктор, чтобы запросить матрицу единиц 2×4, используя следующую статическую функцию-член:
Matrix Matrix::Ones(const int noOfRows, const int noOfCols){
Matrix outO(noOfRows, noOfCols);
return outO;
} //My static Ones member function
Это, очевидно, возвращает матрицу 2×4 нулей, а не единиц.
Поэтому я пытался найти способ иметь оператор 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?
(Я ограничен в этом формате, так как мне нужно использовать переменную данных, так как я использую ее позже во время оператора<< перегрузка)
Передайте значение в качестве необязательного аргумента.
Декларация:
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);
То же самое относится и к другим функциям.
Других решений пока нет …