C++类中的访问权限问题

 
引用http://www.cnblogs.com/dongsheng/p/3344011.html

纠结的东西:

private,public,protected方法的访问范围.(public继承下)
private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. 
protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问 
public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问
注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数

A.在无继承的情况下,类内部可以随意访问,即使是private;类外部无法访问protected/private成员 .

B.在有继承的情况下,

       (先确定类继承方式,

        再确定继承后子类的新成员属性,

        最后确定子类内部/外部的访问权限:!!!此时即使是在子类的内部也不能访问父类的private

         )

1.若是public继承的话,父类的public/protected/private属性继承到子类时,均不会变化(新成员)

              在子类内部访问时,无法访问父类的private(对比:在无继承时,类内可随便访问)

              在子类外部访问时,无法访问子类的新成员protected/private

2.若是protected继承的话,父类的public/protected/private属性继承到子类时,会变化为(新成员)protected/protected/private

              在子类内部访问时,无法访问父类的private(对比:在无继承时,类内可随便访问)

              在子类外部访问时,无法访问子类的新成员protected/private

3.若是private继承的话,父类的public/protected/private属性继承到子类时,会变化为(新成员)private/private/private

              在子类内部访问时,无法访问父类的private(对比:在无继承时,类内可随便访问)

              在子类外部访问时,无法访问子类的新成员protected/private

第五:保护继承与私有继承

         从上面的结果来看,私有继承和保护继承作用完全一样。仔细一想其实还是有区别,区别是如果派生类再一次去派生其它类时,对于刚才的私有继承来说,再派生的类将得不到任何成员。而对于刚才的保护继承,仍能够得到基类的公有和保护成员。

 A类(基类)B类(A的派生类)C类(B的派生类)
公有继承 公有成员 公有成员 公有成员
私有成员 (无) (无)
保护成员 保护成员 保护成员
私有继承 公有成员 私有成员 (无)
私有成员 (无) (无)
保护成员 私有成员 (无)
保护继承 公有成员 保护成员 保护成员
私有成员 (无) (无)
保护成员 保护成员 保护成员
原文地址:https://www.cnblogs.com/wj0816/p/6569048.html