我正在写一些代码,这是我正在做的一个小项目的一部分,在我测试代码时,对我来说有些突出。我正在使用如下所示的类函数:
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参数是受保护的,我是否不能(从参数)访问它们?我对为什么允许这样做感到困惑。
答案 0 :(得分:3)
来自access specifiers at cppreference.com
该类的私人成员只能由该类的成员和朋友访问,无论这些成员是在相同实例还是在不同实例上:
class S {
private:
int n; // S::n is private
public:
S() : n(10) {} // this->n is accessible in S::S
S(const S& other) : n(other.n) {} // other.n is accessible in S::S
};