C++引用传参(opeartor=)不一定可访问private
来源:互联网 发布:嵌入式c语言精华 编辑:程序博客网 时间:2024/05/18 09:09
转载自深度解析:C++传引用能否访问private成员?
1.转载内容
</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类对象,自然报错
2.自己总结
1.引用传参不是能够访问private成员的原因,即使是传值,也可能可以访问private;
#include <iostream>using namespace std;class Test{public: Test(){ data=1; } void aa(Test bb){ cout<<bb.data; }private: int data;};int main(){ Test t1,t2; t1.aa(t2);}
上述传值页可以访问private;
2.记住类的原则:对于private,只有类中成员才能够访问.
3.还有最重要的一点,即使在类中一定能访问:
只有参数的类型和this是同一个类时.详细见转载中dog和cat例子.
0 0
- C++引用传参(opeartor=)不一定可访问private
- 深度解析:C++传引用能否访问private成员?
- c++_public,protected,private访问
- C++:private成员的访问
- [C++]C++重载 opeartor= must be a nonstatic member function?
- Objective-C 访问权限 public private protect
- C++_public,protected,private访问权限
- public/protected/private成员在子类中的可访问性
- [c#]可访问性不一致
- 【C++】类访问修饰符(public&private&protected )
- C#public、 protected、private、internal、protected internal访问修饰符
- Java public private protected和默认的可访问性级别
- C# 修饰符 public、protected、internal 或 private 可访问性级别
- [C#] 成员的可访问性
- C#“可访问性不一致”问题
- c传参引用const
- 不一定。
- 不一定
- 关于双系统的引导问题
- IDE调试思路
- python操作Excel读写--使用xlrd
- 内部排序算法之冒泡排序
- 携程2016实习生招聘笔试题
- C++引用传参(opeartor=)不一定可访问private
- 个人对观察者模式的理解和应用
- 【linux】sed命令详解
- Volley的cache之硬盘缓存--DiskBasedCache
- 基于51单片机的六足仿生机器人
- MySQL导入.csv文件时报1300错误
- SQL 数据库 学习 008 如何通过图形化界面建表 和 建主外键约束
- Java注解的使用
- 为什么说Volley适合数据量小,通信频繁的网络操作