深度解析:C++传引用能否访问private成员?
来源:互联网 发布:gmail pop 端口 编辑:程序博客网 时间:2024/05/22 03:17
</pre> 今天实现一个矩阵类,重载相加运算符,我是这样实现的:<pre name="code" class="cpp">Matrix Matrix::operator+(const Matrix& B)const{ if((row != B.row) || (col != B.col)) throw invalid_argument("The matrix should be matched"); Matrix& T = * new Matrix; T.row = row; T.col = col; T.elems = new double[row*col]; for(int i = 0; i != row*col; ++i) T.elems[i] = elems[i] + B.elems[i]; return T;};
类方法中,参数是该类对象的引用,实现时可以直接访问该类的private成员,让我以为传引用可以直接访问引用对象private成员
然后我写了一个全局函数,参数也是引用,却不能访问对象的private成员了,如下的代码会报错
bool operator==(const Matrix &A, const Matrix &B){ if(A.row != B.row || A.col != B.col) { return false; } for ( int i = 0; i < A.row; ++i ) { for ( int j = 0; j < A.col; ++j ) { if ( A(i,j) != B(i,j) ) { return false; } } } return true;}
所以:传引用并不能访问private成员
前一个函数是类方法,才能访问。
但是,前一个方法传得对象引用是该类对象,怎么也能访问?因为:同一个类的不同对象可以访问对方的private成员变量或调用对方的private成员方法
后一个函数是全局方法,自然不行了。
然后又实验了一下,如果类方法传的引用不是该类对象呢?答案是无法访问
int Dog::test_function(Dog &dog){ int height = dog.height; return height;}int Dog::test_function1(Cat &cat){ int height = cat.height; return height;}如上,第一个函数,传入的对象是Dog,并不会报错
而第二个函数,传入的对象时Cat,非Dog类对象,自然报错
1 0
- 深度解析:C++传引用能否访问private成员?
- C++:private成员的访问
- C++引用传参(opeartor=)不一定可访问private
- 子类能否访问或覆盖父类的private方法
- 品private成员的访问控制
- 用指针访问类中private成员
- 通过虚函数表访问private成员
- 怎样访问private:static中的数据成员
- 绕过private成员函数访问限制
- C++用指针访问private 成员
- 如何访问类中的private成员变量
- C++成员访问限定符 private public
- c++_public,protected,private访问
- 由private成员到类成员访问控制
- 子类能否继承、访问父类的私有成员
- C++访问权限 public、protected、private 解析
- C++中 public protected private 类成员的访问
- 内联汇编访问类或结构的private 成员变量
- 个人的Github代码合集
- Tetris代码调试问题总结
- Session小记
- Ubuntu下通过PPA仓库安装JDK
- JavaScript之二分法排序
- 深度解析:C++传引用能否访问private成员?
- jstl.jar 导入eclipse中的方法
- HDOJ 1181 变形课(邻接表+DFS或BFS)
- 百度优化规范之标题优化-网站推广
- Is your boss making you sick?
- Android Studio系列教程四--Gradle基础
- c++实现链式结构的栈
- r语言kmeans聚类博客转载
- android 大图无损上传