protected权限问题
来源:互联网 发布:教练技术 知乎 编辑:程序博客网 时间:2024/06/10 03:36
转载,释然读C++ Primer 心中疑惑: http://www.cnblogs.com/harlentan/archive/2011/03/05/2006444.html
关于C++中protected的访问权限的讨论已经是一个很陈旧的话题了,陈旧到大家都不愿意去讨论,觉得他见到到吃饭睡觉那么自然。
我再次读《C++ Primer》的时候,其中关于protected 成员的描述是这样的:
protected Members
The protected access label can be thought of as a blend of private and public :
Like private members, protected members are inaccessible to users of the class.
Like public members, the protected members are accessible to classes derived from this class.
In addition, protected has another important property:
A derived object may access the protected members of its base class only through a derived object. The derived class has no special access to the protected members of base type objects.
在没有继承的情况下,protected跟private相同。在派生类的时候才出现分化。
上面那段英文前两条都很好理解,基类对象不能访问基类的protected成员,派生类中可以访问基类的protected成员。也就是说private成员是不能被继承的,只有public,protected的成员才可以被继承。
就是最后一条有些迷惑人,派生类对象如果要访问基类protected成员只有通过派生类对象,派生类不能访问基类对象的protected成员。
请注意 drived class和drived object:派生类和派生类对象。第一点和第二点都是针对派生类来说的。
对于第三点总结一句话:只有在派生类中才可以通过派生类对象访问基类的protected成员。
举一个简单的例子:
#include <iostream> using namespace std; class Base { public: Base(){}; virtual ~Base(){}; protected: int int_pro; }; class A : public Base { public: A(){}; A(int da){int_pro = da;} void Print(A &obj){obj.int_pro = 24;} void PrintPro(){cout << "The proteted data is " << int_pro <<endl;} }; int main() { A aObj; A aObj2(5); aObj2.PrintPro(); aObj.Print(aObj2); aObj2.PrintPro(); //注释1 //aObj.int_pro = 8; }
编译运行结果如下:
The protected data is 5
The protected data is 24
可见,在派生类内部直接访问protected成员和访问派生类对象基类的protected成员都是可行的。
但是若果解开注释1.就会编译报错。
很多书上都说有派生类的情况下protected的访问权限同public。这种说法是不对的,类内部直接访问没什么区别,但是访问对象基类的protected成员只能是在该类的内部。
我这里只列举了只有一层继承的情况,如果有多重继承的情况,比如三层。那么。中间层的类的内部还可以访问第三层类对象的基类成员,但是不能访问第三层类自己的protected的成员。
- protected权限问题
- Java-Protected访问权限问题
- C++ protected的访问权限问题
- 关于private、protected、public访问权限问题
- protected权限
- public、protected和private访问权限以及继承问题
- C++ - 类内部private和protected访问权限问题
- java类的访问权限问题(public default private protected)
- 例解public protected default private访问权限问题
- java中private、protected、public修饰的权限问题
- Java:由Object.clone()而引出的protected权限问题
- Java中权限修饰问题private -> protected -> (default) -> public
- protected访问权限
- java protected访问权限
- java protected 访问权限
- Protected访问权限
- protected 关键字 访问权限
- protected访问权限
- 如何在spring框架中解决多数据源的问题源码
- 永不逃避,直面困难
- Spring MVC 1
- Android 开发实战
- 黑马程序员——Java基础:static关键字、单例设计模式
- protected权限问题
- OpenCV2邻域和模板操作
- Axis2
- poj3260解题报告
- Android-扫描二维码、生成二维码(Zxing库)
- 动态改变view的style
- spring MVC 2-helloword 入门
- jQuery收藏链接
- SPRING JDBC详细使用