C++ 继承之访问权限

来源:互联网 发布:软件升级必然凯文凯利 编辑:程序博客网 时间:2024/04/30 01:43

关于C++继承,可分成三种方式,分别为public继承,private继承与protected继承,其中public继承被称为接口继承,是因为此类继承所得的派生类可自由转化为基类,具有与基类相同的接口(基类有的函数,派生类均有,且功能一致);而private继承与protected继承则称之为实现继承,取之用以实现基类的具体功能之意。

关于C++各种继承方式之后所得的派生类对于父类成员的访问权限可以参见博文:http://see.xidian.edu.cn/cpp/biancheng/view/91.html


而父类成员对于不同位置的访问权限则可以参见博文:http://blog.csdn.net/xdrt81y/article/details/17144885


具体来看一个程序:

#include<iostream>#include<memory.h>#include<assert.h>using namespace std;class A{int a;public:A(int i):a(i){}void print(){cout<<a<<endl;}};class B:public A{int b;public:B(int i = 3):A(i-1),b(i){}void out(){cout<<b<<endl;cout<<a<<endl;}};int main(){A a;a.print();B b;b.out();}

此处,选用了public继承为例,对某一只有private成员的类进行了接口继承,并在派生类中队此成员进行访问,程序输出结果如下:

t.cpp: In member function 'void B::out()':Line 9: error: 'int A::a' is privatecompilation terminated due to -Wfatal-errors.
即派生类对于基类的private成员不具访问权限,访问失败。


由此可见,不论以何种方式对基类进行继承,private成员对于派生类均不可访问,欲访问只能通过基类的public接口(函数)实现。而protected成员是专门用以为派生提供方便的成员类型,此类成员在子类中具有与public成员一般无二的访问权限。但是protected成员对于类外而言,却依然是宫门深锁不可触摸。protected继承将基类中的public成员与protected成员转变成子类的protected成员,而private继承则转变成private成员(此时,子类对于此二类成员依然具有着访问权限,只是对于外界以及子类的子类而言,此二者不可访问而已)。

0 0