P28-c++类继承-05访问控制: protected

1. 访问控制: protected

到目前为止,本书的类示例已经使用了关键字 public和 private来控制对类成员的访问。还存在另一个访问类别,这种类别用关键字 protected表示。
关键字 protected与 private相似,在类外只能用公有类成员 来访问 protected 部分中的类成员。
private和 protected之间的区別只有在基类派生的类中オ会表現出来。

派生类的成员可以直接访问基类的保护成员,但不能直接访问基类的私有成员。因此,对于外部世界来说,保护成员的行为与私有成员相似:但对于派生类来说,保护成员的行为与公有成员相似。

例如,假如 Brass 类将 balance成员声明为保护的

Class Brass
{
    
    
protected:
	double balance;
};

在这种情况下, BrassPlus类可以直接访问 balance,而不需要使用 Brass方法。

使用保护数据成员可以简化代码的编写工作,但存在设计缺陷。例如,继续以 BrassPlus为例,如果 balance 是受保护的,则可以按下面的方式编写代码:

void BrassPlus::Reset(double amt)
{
    
    
	balance = amt;
}

Brass类被设计成只能通过 Deposit()和 Withdraw()才能修改 balance。但对于 BrassPlus对象, Reset()方法将忽略 Withdraw()中的保护措施,实际上使 balance成为公有变量。

警告:最好对类数据成员采用私有访问控制,不要使用保护访问控制;同时通过基类方法使派生类能够访问基类数据。

然而,对于成员函数来说,保护访问控制很有用,它让派生类能够访问公众不能使用的内部函数。

猜你喜欢

转载自blog.csdn.net/sgy1993/article/details/113872847
今日推荐