继承的访问控制--保护继承

本文探讨了保护继承的概念,指出在保护继承下,基类的公有成员在派生类中变为保护成员,无法直接在类外部访问。通过示例代码解释了派生类对象如何通过公有成员函数间接访问基类的保护成员,同时阐述了保护成员的声明方式及其在不同继承方式下的访问特性变化。

一、保护继承

保护继承中,基类的公有成员在派生类中成为保护成员,基类的保护成员在派生类中仍为保护成员,所以,派生类的所有成员在类的外部都无法访问它们


例如,下面程序实现类Derived对基类Base的保护继承,

仔细理解保护继承后派生类对象如何访问基类的成员。
这里写图片描述
这里写图片描述

在上述代码中,类Base定义了保护成员变量b,类Derived**保护继承**自类Base。

在主函数main()中,由类Derived创建对象ob,该对象直接访问类Base的公有成员函数setab()时会出现错误,这是因为经过保护继承后,类Base的公有成员在类Derived中成为保护成员,而外部函数是不能直接访问保护成员的,需要通过调用公有成员函数来实现。

二、保护成员的声明

保护成员用关键字protected声明,它可以放在类声明的任何地方,通常放在私有成员和公有成员之间。

其声明的一般形式为:

class 类名
{
          private//私有成员
          protected//保护成员
          public//公有成员
};

例如,下面程序创建类Base的对象ob,在使用该对象访问类中的私有成员和保护成员时需要通过公有函数来实现。

这里写图片描述

在上述代码主函数main()中,由类Base创建了对象ob,直接访问私有成员a和保护成员b都是非法的。

如果要访问私有成员和保护成员,必须通过公有成员函数来访问,上述示例是通过setab()成员函数来实现的。

了解保护成员的概念后,再来看保护成员被继承后访问特性的变化。

由于继承的方式不同,因此保护成员被继承后其访问特性相应如下:

1、若为公有继承

   则基类中的保护成员在派生类中也为保护成员,

   可被派生类直接访问,

   但不能被外部函数直接访问,

   外部函数只能通过派生类的对象间接访问它们。

2、若为私有继承

 则基类中的保护成员在派生类中成为私有成员,

 派生类可直接访问它们,

 但外部函数或在类外通过派生类的对象都不能访问它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值