Я пишу некоторый код как часть небольшого проекта, над которым я работаю, и что-то выделялось мне, когда я тестировал свой код. Я работаю с функцией класса, показанной ниже:
class Matrix{
public:
//Constructors
Matrix(); //EMPTY Matrix
Matrix(int, int); //Matrix WITH ROW AND COL
Matrix(const Matrix &); //Copy a matrix to this one
~Matrix(); //Destructor
//Matrix operations involving the matrix in question
Matrix madd(Matrix const &m) const; // Matrix addition
private:
double **array; //vector<vector<double>> array;
int nrows;
int ncols;
int ncell;
};
Ниже, обращая внимание на функцию madd, я выписал ее в другом файле, показанном ниже:
Matrix Matrix::madd(Matrix const &m) const{
assert(nrows==m.nrows && ncols==m.ncols);
Matrix result(nrows,ncols);
int i,j;
for (i=0 ; i<nrows ; i++)
for (j=0 ; j<ncols ; j++)
result.array[i][j] = array[i][j] + m.array[i][j];
return result;
}
Полагаю, вы можете догадаться, что он добавляет матрицу. Если честно, я нашел какой-то код в сети, и я просто пытаюсь изменить его для своего собственного использования, так что эта функция была написана не мной полностью. Мне удалось это скомпилировать, и после небольшого теста все заработало правильно, но меня смущает то, как в функции я смог вызвать m.ncols и m.nrows. Глядя на определение класса, члены являются частными, так как я могу получить к ним доступ? Даже если аргумент m передается как const, так как параметры nrows и ncols защищены, могу ли я NOT иметь доступ к ним (из аргумента)? Я не понимаю, почему это разрешено.