public — "is-a" relationship. protected — "implemented-as". private — "implemented-in-terms-of".
1class Base {2public:3 int public_member;4protected:5 int protected_member;6private:7 int private_member;8};910// Public inheritance11class PublicDerived : public Base {12public:13 void access() {14 public_member; // OK15 protected_member; // OK16 // private_member; // Error17 }18};1920int main() {21 PublicDerived obj;22 obj.public_member; // OK23 // obj.protected_member; // Error24}2526// Protected inheritance27class ProtectedDerived : protected Base {28public:29 void access() {30 public_member; // OK31 protected_member; // OK32 }33};3435// Private inheritance36class PrivateDerived : private Base {37public:38 void access() {39 public_member; // OK40 protected_member; // OK41 }42};
Summary: