C++ 类的继承访问控制问题

下列程序编译时会出现错误,请根据行号选择错误位置1,2,4,5,6

#include <iostream>
using namespace std;
class A{
  int a1;
protected:
  int a2;
public:
  int a3;
};
class B: public A{
  int b1;
protected:
  int b2;
public:
  int b3;
};
class C:private B{
  int c1;
protected:
  int c2;
public:
  int c3;
};
int main(){
  B obb;
  C obc;
  cout<<obb.a1;//1
  cout<<obb.a2;//2
  cout<<obb.a3;//3
  cout<<obc.b1;//4
  cout<<obc.b2;//5
  cout<<obc.b3;//6
  cout<<obc.c3;//7
  return 0;
}

根据上题子类对父类的不同继承可以得到下图:

 对该题进行分析如下:

 总结:

派生类中成员的访问属性:

(1)基类中访问属性为公有public:派生类中可以访问派生类外部(指建立派生类对象,在派生类的类外部)可以访问;下层公有派生类中可以访问

(2)基类中访问属性为保护protected:派生类中可以访问;派生类外部(指建立派生类对象)不可访问;下层公有派生类中可以访问

(3)基类中访问属性为私有private:派生类中可以访问;派生类外部(指建立派生类对象)不可访问;下层公有派生类中不可访问

(4)私有继承和保护继承的区别(即在私有派生类和保护派生类中的区别):在直接派生类中,两者均为在类外不可访问,而在派生类中可以通过成员函数访问基类的私有成员和保护成员;若继续派生,私有成员在派生类中也无法访问。

(5)对于protected保护成员:其在基类中可以被访问;在派生类中可以被访问;但类的实例(创建类的对象)无法访问。

对上图进行总结+扩充:

(1)一个类的访问控制为:

    public:公有成员,可以被类内及类外访问。
    private:私有成员,只能被内部访问。
    protected:保护成员,只能被内部或继承类内部访问。

(2)继承类的访问修饰符为:

    无论何种继承,在继承类中父类的私有成员在子类中依然存在,但均不可访问
    public:公有继承,父类成员在子类中保持原有的访问属性。
    private:私有继承,父类成员在子类中成为私有成员。
    protected:保护继承,public和protected均变为protected,private也变为private。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值