C++ 继承之访问权限
2014-08-20 14:43
267 查看
关于C++继承,可分成三种方式,分别为public继承,private继承与protected继承,其中public继承被称为接口继承,是因为此类继承所得的派生类可自由转化为基类,具有与基类相同的接口(基类有的函数,派生类均有,且功能一致);而private继承与protected继承则称之为实现继承,取之用以实现基类的具体功能之意。
关于C++各种继承方式之后所得的派生类对于父类成员的访问权限可以参见博文:http://see.xidian.edu.cn/cpp/biancheng/view/91.html
而父类成员对于不同位置的访问权限则可以参见博文:/article/7746471.html
具体来看一个程序:
此处,选用了public继承为例,对某一只有private成员的类进行了接口继承,并在派生类中队此成员进行访问,程序输出结果如下:
即派生类对于基类的private成员不具访问权限,访问失败。
由此可见,不论以何种方式对基类进行继承,private成员对于派生类均不可访问,欲访问只能通过基类的public接口(函数)实现。而protected成员是专门用以为派生提供方便的成员类型,此类成员在子类中具有与public成员一般无二的访问权限。但是protected成员对于类外而言,却依然是宫门深锁不可触摸。protected继承将基类中的public成员与protected成员转变成子类的protected成员,而private继承则转变成private成员(此时,子类对于此二类成员依然具有着访问权限,只是对于外界以及子类的子类而言,此二者不可访问而已)。
关于C++各种继承方式之后所得的派生类对于父类成员的访问权限可以参见博文:http://see.xidian.edu.cn/cpp/biancheng/view/91.html
而父类成员对于不同位置的访问权限则可以参见博文:/article/7746471.html
具体来看一个程序:
#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 private compilation terminated due to -Wfatal-errors.
即派生类对于基类的private成员不具访问权限,访问失败。
由此可见,不论以何种方式对基类进行继承,private成员对于派生类均不可访问,欲访问只能通过基类的public接口(函数)实现。而protected成员是专门用以为派生提供方便的成员类型,此类成员在子类中具有与public成员一般无二的访问权限。但是protected成员对于类外而言,却依然是宫门深锁不可触摸。protected继承将基类中的public成员与protected成员转变成子类的protected成员,而private继承则转变成private成员(此时,子类对于此二类成员依然具有着访问权限,只是对于外界以及子类的子类而言,此二者不可访问而已)。
相关文章推荐
- C++中 public和private派生类继承问题和访问权限问题
- C++中 public和private派生类继承问题和访问权限问题
- C++的三种继承机制以及继承机制对三种访问权限(public, protected, private)的影响
- C++中的 public和private以及protected派生类继承问题和访问权限问题
- C++的三种访问权限与三种继承方式
- 关于C++中私有继承后虚函数的访问权限与私有继承后多态的问题
- C++中 public和private派生类继承问题和访问权限问题
- C++继承后的函数访问权限
- C++中 public和private派生类继承问题和访问权限问题
- C++中public,protected,private派生类继承问题和访问权限问题
- C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
- c++与Java中继承关系对成员访问权限的影响之比较
- C++:【转】3种继承关系和3中访问权限
- C++——三种继承方式与三种访问权限的相互组合
- c++三种继承机制和访问权限
- C++中 public和private派生类继承问题和访问权限问题
- C++——三种继承方式与三种访问权限的相互组合
- C++中public,protected,private派生类继承问题和访问权限问题
- C++中 public和private派生类继承问题和访问权限问题
- C++中 public和private派生类继承问题和访问权限问题