C++ 访问类别protected
——C++访问类别除了private、public,还有protected。
对外部世界来说,保护成员的行为与私有 成员相似。
对于派生类来说,保护成员的行为与公有成员相似。
用于数据成员时的缺陷。
用于成员函数时的优点。
对外部世界。
关键字protected与private相似,在类外只能用公有类成员来访问protected部分中的类成员。
对派生类。
关键字protected与public相似,派生类可以直接访问基类的保护成员。
缺陷。
使用保护数据成员可以简化代码的编写工作(派生类可以直接使用基类的protected数据成员,而数据成员以前通常是private成员,这将需要使用额外的基类公有访问函数或保护函数来查看或修改基类private数据成员,并且公有访问函数对外界开放,而protected数据成员只对派生类可见),但存在设计缺陷。
尽管如此,若数据成员是受保护的,类被设计成只能通过成员函数才能修改该数据成员,protected属性将忽略该保护措施,允许直接访问,这实际上使protected数据成员成为了公有变量(对派生类而言)。
void BrassPlus::Reset(double amt) { balance = amt; // balance is protected }
因此最好对类数据成员采用私有访问控制,不要使用保护访问控制;同时通过基类方法使派生类能够访问基类数据。
优点。
对于成员函数来说,保护访问控制很有用,它让派生类能够访问公众不能使用的内部函数。
-----