In my understanding, virtual function should always be public because virtual functions are interface so obviously they should be accessible to the client. Why would we need private virtual function?