It seems that Derived class still can access Base::z?
Code:class Base{ public: int z; Base(){ cout<<"Base::Base()"<<endl; } ~Base(){} }; class Derived : private Base{ public: Derived():m1(){ cout<<"Derived::Derived()"<<endl; z=3; } }; int main(){ Derived de; }