先看实例:
#include <iostream> class Mammal { public: // constructors Mammal():itsAge(2), itsWeight(5){} ~Mammal(){} protected: int itsAge; int itsWeight; }; class Dog: public Mammal { public // constructors Dog():itsBreed(1){} ~Dog(){} // Other methods void WagTail(){ std::cout<<"Tail wagging...\n"; std::cout<<itsAge<<std:endl; } private: int itsBreed; } int main() { Dog fido; fido.WagTail(); return 0; }在WagTail()函数中,我们直接访问了protected变量itsAge 假如我们在定义Mammal类时,将itsAge设置为private时,在WagTail中引用itsAge,程序将报错 这个例子说明: protected的数据成员和函数对派生的类是完全可见的,而private,对派生类是不可见的。其他方面与private一样。
备注:以下结论没有经过验证,记录在此,仅供自己理解
以Linux的文件权限的概念来说明:由于没有x概念,因此只涉及r, w概念 假如:hello.cpp文件为例 public: rw(owner)|rw(group)|rw(others) protected: rw|rw|-- private: rw|--|-- 因此, 当itsAge, itsWeight为protected时,WagTail()函数可以访问itsAge, itsWeight; 当itsAge, itsWeight为private时, WagTail()函数不可以访问; 而不论itsAge, itsWeight是protected还是private, main()函数都不可以访问itsAge,itsWeight,itsBreed; 即fido.itsAge // error fido.itsWeight // error fido.itsBreed //error 如果需要访问必须通过public的成员函数或变量, 比如fido.WagTail()这类函数