一、保护继承
在保护继承中,基类的公有成员在派生类中成为保护成员,基类的保护成员在派生类中仍为保护成员,所以,派生类的所有成员在类的外部都无法访问它们。
例如,下面程序实现类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、若为私有继承
则基类中的保护成员在派生类中成为私有成员,
派生类可直接访问它们,
但外部函数或在类外通过派生类的对象都不能访问它们。