C++ 继承之访问权限

本文详细解析了C++中的三种继承方式:public、private与protected继承的特点及区别。介绍了public继承作为接口继承的特性,以及private和protected继承作为实现继承的作用。并通过实例展示了不同继承方式下派生类对基类成员的访问权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于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 private
compilation terminated due to -Wfatal-errors.
即派生类对于基类的private成员不具访问权限,访问失败。


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值